GestureDetector手势监听不到滑动事件(onFling,onScroll)
2018-02-08 16:15
239 查看
在做可以左右的imageview的时候,自定义ImageView重写onTouchEvent,交给GestureDetector处理手势,
然后发现onDown()方法可以执行,但是滑动事件始终不执行。
解决办法就是把默认的onDown()方法重写,返回ture就可以,让事件继续往下传递。代码如下。
然后发现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("手指按在持续一段时间,并且没有松开"); } }; }
相关文章推荐
- 如何通过GestureDetector实现屏幕事件监听(滑动切换Layout) (转)
- pan手势监听对view的上下左右滑动,利用关联对象在block中触发view的点击事件(附手势大全)
- Android开发08_OnTouchevent触摸事件(手势监听)
- Android之手势的识别与处理(双击onDoubleTap、滑动onFling、拖动onScroll)
- 移动端(IOS)iframe监听不到 onscroll 事件
- convertView setOnTouchListener 监听不到 touch up,move等 事件
- ScrollView中事件监听和GestureDetector手势监听冲突
- OnGestureListener监听“view”时无法执行的onScroll()与onFling()方法的解决方案
- 安卓 listView的点击监听和滑动监听 setOnScrollListener setOnTouchListener
- android onTouchEvent 左右手势滑动事件处理
- 手势事件(GestureDetector)API的使用
- 记安卓开发中监听左右手势滑动
- 全局监听SCREEN_ON和SCREEN_OFF的替代方法--监听屏幕解锁事件
- 你真的会用OnTouchListener、OnClickListener、OnLongClickListener监听事件么?
- android手势操作滑动效果触摸屏事件处理
- ie8对于onmessage 事件的监听和取消
- android在指定区域监听滑动事件
- android开发之滑动手势翻图 滑动手势监听
- Android OnTouchListener 触摸事件 & GestureDetector 手势识别类
- android onTouchEvent 左右手势滑动事件处理