Android自定义长按事件
2017-04-10 18:15
267 查看
Android系统自带了长按事件,setOnLongClickListener即可监听。但是有时候,你不希望用系统的长按事件,比如当希望长按的时间更长一点的时候。这时候就需要自己来定义这个长按事件了。
下面的代码定义了一个阈值TOUCH_SLOP,在移动超过阈值和释放之后,会将Runnable从事件队列中remove掉,长按事件也就不会再触发了。源码中实现长按的原理也基本如此。
下面的代码定义了一个阈值TOUCH_SLOP,在移动超过阈值和释放之后,会将Runnable从事件队列中remove掉,长按事件也就不会再触发了。源码中实现长按的原理也基本如此。
package chroya.fun; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; public class LongPressView2 extends View{ private int mLastMotionX, mLastMotionY; //是否移动了 private boolean isMoved; //长按的runnable private Runnable mLongPressRunnable; //移动的阈值 private static final int TOUCH_SLOP = 20; public LongPressView2(Context context) { super(context); mLongPressRunnable = new Runnable() { @Override public void run() { performLongClick(); } }; } public boolean dispatchTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mLastMotionX = x; mLastMotionY = y; isMoved = false; postDelayed(mLongPressRunnable, ViewConfiguration.getLongPressTimeout()); break; case MotionEvent.ACTION_MOVE: if(isMoved) break; if(Math.abs(mLastMotionX-x) > TOUCH_SLOP|| Math.abs(mLastMotionY-y) > TOUCH_SLOP) { //移动超过阈值,则表示移动了 isMoved = true; removeCallbacks(mLongPressRunnable); } break; case MotionEvent.ACTION_UP: //释放了 removeCallbacks(mLongPressRunnable); break; } return true; } }
相关文章推荐
- 【Android - 自定义View】之View的事件分发机制
- Android自定义长按事件
- 来实现android自定义的menu菜单之二:为自定义menu中的线性布局添加事件
- Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色
- android 自定义View(一) View的事件分发与绘制
- Android中View的事件体系(3)——自定义横向滚动viewGroup
- android 自定义listview无法响应点击事件OnItemClickListener
- Android开发中自定义ListView中存在ImageButton不响应ListItemClick单击事件详细d飞解决办法
- android 自定义TextView中Html超链接点击事件详解
- Android 自定义view的监听事件
- android 自定义View实现长按事件
- 【Android】自定义ViewPage 禁用左右滑动事件
- android-自定义处理输入事件
- Android自定义TextView中的超链接点击事件处理
- Android 自定义View实现单击和双击事件的方法
- 自定义android用户控件,使用回调函数实现自定义事件
- Android之自定义View的监听事件
- Android自定义view之事件传递机制
- android 自定义listview无法响应点击事件OnItemClickListener
- Android 自定义ScrollView的滑动监听事件