GestureDetector手势监听不到滑动事件(onFling,onScroll)
程序员文章站
2024-03-24 17:53:34
...
在做可以左右的imageview的时候,自定义ImageView重写onTouchEvent,交给GestureDetector处理手势,
然后发现onDown()方法可以执行,但是滑动事件始终不执行。
解决办法就是把默认的onDown()方法重写,返回ture就可以,让事件继续往下传递。代码如下。
package cn.sccl.app.iss.familyalbum.album;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
/**
* Created by caobin on 2018/2/8.
*/
public class GestureImageView extends android.support.v7.widget.AppCompatImageView {
private String tag = "移动 ";
private GestureDetector mGestureDetector;
public GestureImageView(Context context) {
this(context, null);
}
public GestureImageView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public GestureImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mGestureDetector = new GestureDetector(context, gestureListener);
//mGestureDetector.setIsLongpressEnabled(false);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
/**
*
*/
GestureDetector.OnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.e(tag, "onFling-" + "滑动");
//手指在触摸屏上迅速移动,并松开的动作。
int mini_width = 120;
int mini_speed = 0;
float distance_right = motionEvent1.getX() - motionEvent.getX();
float distance_left = motionEvent.getX() - motionEvent1.getX();
float distance_down = motionEvent1.getY() - motionEvent.getY();
float distance_up = motionEvent.getY() - motionEvent1.getY();
if (distance_right > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + "向右滑动");
} else if (distance_left > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + "向左滑动");
} else if (distance_down > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + "向下滑动");
} else if (distance_up > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + "向上滑动");
}
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
System.err.println("华东");
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onDown(MotionEvent motionEvent) {
//刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
System.err.println("按下");
return true;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
//手指按在触摸屏上,它的时间范围在按下起效,在长按之前
System.err.println("手指按在触摸屏上,它的时间范围在按下起效,在长按之前");
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
//手指离开触摸屏的那一刹那。
System.err.println("手指离开触摸屏的那一刹那");
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
//手指按在持续一段时间,并且没有松开。
System.err.println("手指按在持续一段时间,并且没有松开");
}
};
}
这里主要涉及到的知识点就是android的时间分发了,推荐博客点我
写的非常详细,静下心来慢慢看。