独立组件之间重叠放置时,OnTouch事件的响应顺序

结论: OnTouch由上到下依次响应。上层指排在后面的View,既在UI界面显示在上层的View。
如果上层控件return true,消费掉事件,下层组件不在响应 OnTouch事件。

注意:OnTouch事件只能由子控件向父控件传递。

测试布局文件

<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="200dip"
android:layout_centerHorizontal="true"
android:background="@color/material_blue_grey_900"
android:layout_alignParentBottom="true">

<ImageView
android:id="@+id/imageView"
android:text="@string/hello_world" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_gravity="center"
android:src="@drawable/ic_launcher"/>

<TextView
android:id="@+id/textView"
android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_gravity="center" />

</FrameLayout>


测试代码一:
imageView -> return false;
textView -> return false;
即:imageView 和 textView 的OnTouch事件都返回false。

textView = (TextView)findViewById(R.id.textView);

imageView = (ImageView)findViewById(R.id.imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------imageView");
return false;
}
});

textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------textView");
return false;
}
});

结果一:
09-15 20:23:12.134  28895-28895/com.example.langjian.myapplication E/--﹕ onTouch-----------textView
09-15 20:23:12.134  28895-28895/com.example.langjian.myapplication E/--﹕ onTouch-----------imageView

测试代码二:
imageView -> return false;
textView -> return true;
 
textView = (TextView)findViewById(R.id.textView);

imageView = (ImageView)findViewById(R.id.imageView);



imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------imageView");
return false;
}
});
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------textView");
return true;
}
});
结果二:
09-15 20:25:13.844  30500-30500/com.example.langjian.myapplication E/--﹕ onTouch-----------textView
09-15 20:25:13.864  30500-30500/com.example.langjian.myapplication E/--﹕ onTouch-----------textView

测试代码三:
imageView -> return true;
textView -> return false;

textView = (TextView)findViewById(R.id.textView);

imageView = (ImageView)findViewById(R.id.imageView);

imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------imageView");
return true;
}
});

  
  
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("--", "onTouch-----------textView");
return false;
}
});
结果三:
09-15 20:39:25.022  31824-31824/com.example.langjian.myapplication E/--﹕ onTouch-----------textView
09-15 20:39:25.022  31824-31824/com.example.langjian.myapplication E/--﹕ onTouch-----------imageView
测试代码四:
imageView -> return true;
textView -> return true;
结果四:同结果2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值