View只能获得ACTION_DOWN消息, ACTION_MOVE消息接收不到
2016-10-12 12:23
1146 查看
在实现一个可以滑动的view时, 发现view并不能根据手指的位置滑动, 通过log查看, view只接收到ACTION_DOWN的消息, 没有收到ACTION_MOVE消息.
原因: android的消息传递机制是: 有外到内, 处理机制则相反, 由内到外. 那么当view收到ACTION_DOWN没有处理, 那么此消息最终交由父类来处理消费.
解决方案:
1.在view中处理ACTION_DOWN消息后, return true, 表示此消息由我自己来处理消费. 但是这样view就不能响应点击监听事件.
2.使用view时, 在布局中添加 android:clickable=”true” 或 在代码中 setClickable(true), 这样view不但可以收到ACTION_MOVE消息, 而且可以响应点击监听事件.
滑动view处理逻辑:
原因: android的消息传递机制是: 有外到内, 处理机制则相反, 由内到外. 那么当view收到ACTION_DOWN没有处理, 那么此消息最终交由父类来处理消费.
解决方案:
1.在view中处理ACTION_DOWN消息后, return true, 表示此消息由我自己来处理消费. 但是这样view就不能响应点击监听事件.
2.使用view时, 在布局中添加 android:clickable=”true” 或 在代码中 setClickable(true), 这样view不但可以收到ACTION_MOVE消息, 而且可以响应点击监听事件.
滑动view处理逻辑:
@Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.i("ScrollView", "MotionEvent.ACTION_DOWN"); mLastX = x; mLastY = y; break; case MotionEvent.ACTION_MOVE: Log.i("ScrollView", "MotionEvent.ACTION_MOVE"); int dx = x - mLastX; int dy = y - mLastY; offsetLeftAndRight(dx); offsetTopAndBottom(dy); break; default: break; } return super.onTouchEvent(event); }
相关文章推荐
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- Android 中View只能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决办法
- Android 自定义View可以监听ACTION_DOWN却监听不到ACTION_MOVE和ACTION_UP
- 安卓——问题:控件(view)的OnTouch事件只能获取到ACTION_DOWN事件,UP、MOVE等事件都无法获取到
- Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
- 安卓关于自定义View只能接收ACTION_DOWN事件问题的解决
- Android 自定义view之后只能监听到MotionEvent.ACTION_DOWN的解决办法
- 怎么获得主窗口的CWnd*?怎么把CWnd*变成HWND?怎么给HWND发送WM_USER消息?SendMessage(hwnd,WM_USER,0,0);可是主窗口接收不到
- NSNotification 通知接收不到消息
- SpringMVC ModelAndView方法与模板传参接收不到问题
- ssh框架action域模型不起作用,接收不到jsp页面传来的id值
- android之OnTouchListener只能监听到ACTION_DOWN-----onTouchListener的返回值问题
- 解决Win7系统下以管理员身份运行的程序接收不到拖放文件消息[WM_DROPFILES]问题的方法
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
- Formview单文档或对话框项目接受不到按键消息的解决办法
- Formview单文档或对话框项目接受不到按键消息的解决办法
- ActiveMQ5.3的接收不到消息的问题
- TextView不能响应setOnTouchListener ACTION_DOWN的解决方法
- WIN7/8系统下程序接收不到WM_COPYDATA 消息的原因和解决
- 自定义控件(自定义窗口)在对话框中接收不到WM_CHAR消息的解决方法