前言:比你牛逼的人比你还努力~~唉唉!我又有何理由堕落下去?于是放下了正在热播的电视剧,打开电脑就是干啊,这尼玛程序员伤不起啊~!!!
废话不多说了,还记得上一节 Android手势ImageView三部曲(一)最后我们提及的那个框架么?这一节我们重点了掌握一下GestureDetector这个类相关的属性方法。
一、那么GestureDetector是干嘛的呢?
顾名思义,字面意思就是“手势检测器“的意思,还记得我们上一节中实现的GestureImageView么?我们在onTouchEvent中检测到了各种个样的手势(手指按下、抬起、什么时候属于拖拽、什么时候属于缩放)都是通过我们的计算得到的,但是有了GestureDetector这个类后,我们不需要自己做判断现在是什么手势了,GestureDetector会帮我们做好判断,完了后通过回调函数告诉你,就像官网所说的(This class should only be used with MotionEvents reported via touch (don’t use for trackball events).)这个类仅仅是通过触碰检查事件的,而不是用于跟踪事件的,我检测到了事件,然后告诉你,至于你需要怎么处理这个事件,那就是你自己的事了。
GestureDetector的一些具体的api大家可以去查看谷歌官方文档或启舰大神的博客:
说了这么多估计你都有点累了,下面让我们看看具体怎么使用:
偷一下懒,我就直接用 Android手势ImageView三部曲(一)
中的MatrixImageView类改改代码了:
public class MatrixImageView extends ImageView {
private static final int MODE_NONE = 190;
private static final int MODE_DRAG = 468;
private static final int MODE_ZOOM = 685;
private int mode;
private float startX, startY;
private float midX, midY;
private Matrix currMatrix, savedMatrix;
private float preRotate, rotate;
private float preSpacing;
private GestureDetector detector;
public MatrixImageView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
detector=new GestureDetector(context,onGestureListener);
}
private void initView() {
mode = MODE_NONE;
currMatrix = new Matrix();
savedMatrix = new Matrix();
DisplayMetrics dm = getResources().getDisplayMetrics();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test);
bitmap = Bitmap.createScaledBitmap(bitmap, dm.widthPixels, dm.heightPixels, true);
setImageBitmap(bitmap);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
private GestureDetector.SimpleOnGestureListener onGestureListener=new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.e("TAG", "====onSingleTapUp=====");
return super.onSingleTapUp(e);
}
@Override
public void onLongPress(MotionEvent e) {
Log.e("TAG", "====onLongPress=====");
super.onLongPress(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.e("TAG", "====onScroll=====");
Log.e("TAG", "distanceX===>"+distanceX);
Log.e("TAG", "distanceY===>"+distanceY);
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public void onShowPress(MotionEvent e) {
Log.e("TAG", "====onShowPress=====");
super.onShowPress(e);
}
@Override
public boolean onDown(MotionEvent e) {
Log.e("TAG", "====onDown=====");
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.e("TAG", "====onDoubleTap=====");
return super.onDoubleTap(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.e("TAG", "====onDoubleTapEvent=====");
return super.onDoubleTapEvent(e);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.e("TAG", "====onSingleTapConfirmed=====");
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onContextClick(MotionEvent e) {
Log.e("TAG",