Android 中View只能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决办法
2015-08-20 08:40
573 查看
昨天晚上调试了一晚上,在LinearLayout上接收屏幕动作,但是出现了问题, 下面的代码是本人调的代码
这样一看这个OnTouchListener 的复写应该没什么问题,结尾处return false 代表该事件在此处已经被消费了,可是打开DDMS查看打印日志,当手指滑动到设置了上面Touch监听器的ImageView时,总是打印不出来ACTION_MOVE这里,很明显是根本没有进去,后来各种查问题都查不到,因为ACTION_DOWN是可以进入的,但是ACTION_MOVE和ACTION_UP却不行,已经不是代码的问题了。
各种查找才发现,要把设置监听的这个View的属性设置成 android:clickable="true" 这样才可以响应ACTION_MOVE和ACTION_UP了。
在这里记下了,也给别人提供一个方便
</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" />
在这里记下了,也给别人提供一个方便
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法