Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法

昨天晚上调试了一晚上,在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" />

在这里记下了。也给别人提供一个方便

时间: 2024-10-19 22:54:48

Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法的相关文章

Android 中View只能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决办法

昨天晚上调试了一晚上,在LinearLayout上接收屏幕动作,但是出现了问题, 下面的代码是本人调的代码 </pre><pre name="code" class="java">private int pressedArrow; public class onSetterTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, Mo

Android中View的绘制过程 onMeasure方法简述

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

Android 中View的绘制机制源码分析 一

尊重原创: http://blog.csdn.net/yuanzeyao/article/details/46765113 差不多半年没有写博客了,一是因为工作比较忙,二是觉得没有什么内容值得写,三是因为自己越来越懒了吧,不过最近我对Android中View的绘制机制有了一些新的认识,所以想记录下来并分享给大家.在之后的几篇博客中,我会给大家分享如下的内容: 1.View中measure(),layout(),draw()函数执行过程分析,带领大家详细分析View的尺寸测量过程,位置计算,并最终

源码解析Android中View的measure量算过程

Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算.布局.绘图的总体机制可参见博文< Android中View的布局及绘图机制>.量算是布局和绘图的基础,所以量算是很重要的一个环节.本文将从源码角度解析View的量算过程,这其中会涉及某些关键类以及关键方法. 对View进行量算的目的是让View的父控件知道View想要多大的尺寸. 量算过程概述 如果要进行量算的View是ViewGroup类型,那么ViewGr

【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

android 中view的绘制过程

view的绘制过程中分别会执行:onMeasure(会多次)计算view的大小,OnLayout(),确定控件的大小和位置 onDraw()绘制view 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以

Android 中View的绘制机制源代码分析 三

到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编辑器.这里之所以使用"下定决心"这个词.是由于毕竟Html编辑器使用好几年了.非常多习惯都已经养成了,要改变多年的习惯确实不易.相信这也是还有非常多人坚持使用Html编辑器的原因. 这也反应了一个现象.当人对某一事物非常熟悉时,一旦出现了新的事物想代替老的事物时,人们都有一种抵触的情绪,做

Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

Android中View绘制流程以及invalidate()等相关方法分析

前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时真挚地向渴望了解 Android 框架层的网友,推荐这本书,希望你们能够在Android开发里学到更多的知识 . 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为 根据之前设置的状态,判断是否需要重新计算视图大小(measure).是否重新需要安置视图的位置(layout).以及是否需要重绘 (d