原理:用手势对象的双击事件,分别实现单双击各自功能
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, View.OnTouchListener, GestureDetector.OnDoubleTapListener {
private GestureDetector gestureDetector;
private Matrix matrix;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.imageView);
// 给图片设置触摸事件
imageView.setOnTouchListener(this);
// 得到手势对象,回调6方法
gestureDetector = new GestureDetector(this,this);
// 给手势设置双击事件,回调3方法
gestureDetector.setOnDoubleTapListener(this);
}
/**********************手势对象回调的方法***************************/
/*
* 按下时的回调方法,这里必须把返回值改为true,其他不改可以
* */
@Override
public boolean onDown(MotionEvent e) {
return true;
}
/*
* 按下后短时间内无位移时回调方法
* */
@Override
public void onShowPress(MotionEvent e) {
}
/*
* 单击时回调
* */
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
/*
* 手指滑动时回调
* */
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
ViewCompat.setTranslationX(imageView,-distanceX + ViewCompat.getTranslationX(imageView));
ViewCompat.setTranslationY(imageView,-distanceY + ViewCompat.getTranslationY(imageView));
return false;
}
/*
* 长按时回调,和onSingleTapUp()是互斥的
* */
@Override
public void onLongPress(MotionEvent e) {
}
/*
* 手指滑动屏幕后快速离开,屏幕还处于惯性滑动的状态时回调
* */
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
/*
* imageView.setOnTouchListener(this)的回调方法
* */
@Override
public boolean onTouch(View v, MotionEvent event) {
MotionEvent obtain = MotionEvent.obtain(event);
obtain.setLocation(event.getRawX(),event.getRawX());
return gestureDetector.onTouchEvent(obtain);
}
/*************************双击事件的回调方法***/
/*
* 确认是单击事件时回调
* */
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
//每次若是单击事件的话就会把图片放大1.2倍
ViewPropertyAnimatorCompat animate = ViewCompat.animate(imageView);
animate.scaleXBy(1.2f).scaleYBy(1.2f).start();
return false;
}
/*
* 双击事件时回调
* */
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
/*
* 双击事件
* */
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Toast.makeText(MainActivity.this, "双击事件", Toast.LENGTH_SHORT).show();
return false;
}
}
运行效果如下:
单击时:就会方法图片
双击时: