当前位置: 代码迷 >> Android >> Android 中View只能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决方法
  详细解决方案

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

热度:95   发布时间:2016-04-27 23:21:30.0
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" />


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


版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案