use*_*128 27 android ontouchlistener
我有一个线性布局,上面有一个Button和一个TextView.我为活动写了一个OnTouchEvent.如果我触摸屏幕,代码工作正常,但如果我触摸按钮代码不起作用.这有什么可能的解决方案?
public boolean onTouchEvent(MotionEvent event) {
int eventaction=event.getAction();
switch(eventaction)
{
case MotionEvent.ACTION_MOVE:
reg.setText("hey");
break;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
Dev*_*red 95
问题是Android如何处理触摸事件的操作顺序.每个触摸事件都遵循(简化示例)的模式:
但是事件只会在消费之前跟随链(意味着有人从onTouchEvent()听众那里得到回报).如果你只是触摸屏幕上的某个地方,没有人对这个事件感兴趣,所以它一直流到你的代码.但是,在按钮(或其他可点击的View)的情况下,它会消耗触摸事件,因为它对它感兴趣,因此流程在第4行停止.
如果要监视进入Activity的所有触摸,则需要覆盖,dispatchTouchEvent()因为始终首先onTouchEvent()调用的是,最后调用Activity,并且只有在没有其他人捕获事件的情况下.但是,请注意不要在此处使用事件,否则子视图将永远不会获取它们,并且您的按钮将无法点击.
public boolean dispatchTouchEvent(MotionEvent event) {
int eventaction=event.getAction();
switch(eventaction) {
case MotionEvent.ACTION_MOVE:
reg.setText("hey");
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是将您的触摸处理代码放入自定义ViewGroup(例如LinearLayout)中,并使用其onInterceptTouchEvent()方法允许父视图在必要时偷走并处理触摸事件.但要小心,因为这种互动是一个在新的触摸事件开始之前无法撤消的互动(一旦你偷了一个事件,你就会把它们全部偷走).
HTH
| 归档时间: |
|
| 查看次数: |
23829 次 |
| 最近记录: |