ViewFlipper實現圖片動畫
寫了一個demo,用ViewFlipper實現圖片切換,現在想實現longpress就可以放大當前的圖片。
package com.android.sample;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class ViewFlipperTest extends Activity implements OnTouchListener{
private GestureDetector gestureDetector;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private int FP = ViewGroup.LayoutParams.FILL_PARENT;
private Matrix mSuppMatrix = new Matrix();
private Matrix mBaseMatrix = new Matrix();
private Matrix mDisplayMatrix = new Matrix();
private static boolean isZoom =false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector = new GestureDetector(this, new MyGestureDetector());
viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
LayoutParams params = new ViewGroup.LayoutParams(FP,FP);
int index =0;
for (Integer i : images){
ImageView iv = new ImageView(this);
iv.setImageResource(i);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
viewFlipper.addView(iv, index, params);
index++;
}
viewFlipper.setOnTouchListener(this);
viewFlipper.setLongClickable(true);
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}
return false;
}
@Override
public void onLongPress(MotionEvent e){
ImageView iv = (ImageView) viewFlipper.getCurrentView();
//mSuppMatrix.postTranslate(2, 2);
mDisplayMatrix.set(mBaseMatrix);
mDisplayMatrix.postConcat(mSuppMatrix);
iv.setImageMatrix(mDisplayMatrix);
isZoom = true;
}
}
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
private Integer[] images = {
R.drawable.apple01, R.drawable.apple02,
R.drawable.apple03, R.drawable.apple04,
R.drawable.apple05, R.drawable.apple06
};
}