Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
2017-05-15 11:33
441 查看
昨天晚上调试了一晚上,在LinearLayout上接收屏幕动作,可是出现了问题, 以下的代码是本人调的代码
</pre><pre name="code" class="java">private int pressedArrow; public class onSetterTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { float pt = event.getX(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: if (pt > last_strpos && pt < last_endpos) { if (pt - last_strpos <= last_endpos - pt) { cur_strpos = pt; pressedArrow = R.id.start_pos; } else { cur_endpos = pt; pressedArrow = R.id.end_pos; } } else if (pt <= last_strpos) { cur_strpos = pt; pressedArrow = R.id.start_pos; } else if (pt >= last_endpos) { cur_endpos = pt; pressedArrow = R.id.end_pos; } requestLayout(); Log.d(TAG, "down " + cur_strpos + " " + cur_endpos); last_endpos = cur_endpos; last_strpos = cur_strpos; break; case MotionEvent.ACTION_MOVE: Log.d(TAG, "MOVE " + cur_strpos + " " + cur_endpos); if (pressedArrow == R.id.start_pos) { if (pt < last_endpos) cur_strpos = pt; } else if (pressedArrow == R.id.end_pos) { if (pt > last_strpos) cur_endpos = pt; } requestLayout(); last_endpos = cur_endpos; last_strpos = cur_strpos; break; case MotionEvent.ACTION_UP: updateCalibrator((int)cur_strpos); break; } return false; } }
这样一看这个OnTouchListener 的复写应该没什么问题。结尾处return false 代表该事件在此处已经被消费了。但是打开DDMS查看打印日志。当手指滑动到设置了上面Touch监听器的ImageView时,总是打印不出来ACTION_MOVE这里,非常明显是根本没有进去。后来各种查问题都查不到。由于ACTION_DOWN是能够进入的。但是ACTION_MOVE和ACTION_UP却不行,已经不是代码的问题了。
各种查找才发现,要把设置监听的这个View的属性设置成 android:clickable="true" 这样才干够响应ACTION_MOVE和ACTION_UP了。
<ImageView android:id="@+id/track" android:layout_width="match_parent" android:layout_height="20dp" android:clickable="true" android:layout_gravity="center" android:background="#00000000" android:baselineAlignBottom="true" android:visibility="visible" />
在这里记下了。也给别人提供一个方便
相关文章推荐
- Android 中View只能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决办法
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- Android 自定义View可以监听ACTION_DOWN却监听不到ACTION_MOVE和ACTION_UP
- 安卓——问题:控件(view)的OnTouch事件只能获取到ACTION_DOWN事件,UP、MOVE等事件都无法获取到
- View只能获得ACTION_DOWN消息, ACTION_MOVE消息接收不到
- android gridview onitemclick /actiondown无效,解决方法之一
- 首先是点击事件在不同的布局层次中传递的。 理解Down事件再哪个层次被消费(拦截),后续的Move、Up的点击事件如何传递。 其中ViewGroup中onInterceptTouchEvent方法
- android中布局文件中的控件通过findviewbyid无法关联的解决方法
- 安卓关于自定义View只能接收ACTION_DOWN事件问题的解决
- TextView设置android:ellipsize="marquee"属性,无法实现跑马灯效果的解决方法
- Android 自定义view之后只能监听到MotionEvent.ACTION_DOWN的解决办法
- [置顶] Android无法启动AVD解决方法出现"The connection to adb is down...You must restart adb and Eclipse."
- Android编程中TextView宽度过大导致Drawable无法居中问题解决方法
- [原创]HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法
- Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
- TextView不能响应setOnTouchListener ACTION_DOWN的解决方法
- android焦点分发无法获取到Down事件,却有Move和Up
- Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
- HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法
- android soap webservers 无法执行 报错 ht.call(SOAP_ACTION, envelope);解决方法