如何解决单击子元素时,布局上的侦听器上的 android ontouch 不会触发
我在线性布局上设置了一个 onTouchListener,在触摸布局时,用户可以在屏幕上拖动布局并重新定位布局。这工作正常,但现在我在布局中有一些 ImageViews,当用户在 imageviews 上执行 onTouch 时,布局上的 onTouch 不会触发。它仅在用户单击没有子元素的任何地方时触发。无论用户在布局内的何处单击,我都希望能够拖动布局。 这是一些代码,
<LinearLayout android:layout_width="60dp"
android:layout_height="60dp"
android:orientation="vertical"
android:background="@drawable/shape"
android:animateLayoutChanges="true"
android:id="@+id/layout_panel"
android:clickable="true"
android:layout_gravity="center_horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/img1"
android:layout_width="25dp"
android:layout_height="35dp"
android:clickable="true"
android:src="@drawable/ic_outline_screenshot_12"></ImageView>
<ImageView
android:layout_width="25dp"
android:layout_height="35dp"
android:clickable="true"
android:src="@drawable/ic_outline_content_cut_12"
android:id="@+id/img2"
android:tooltipText="Scissor">
</ImageView>
<ImageView
android:layout_width="25dp"
android:layout_height="35dp"
android:clickable="true"
android:src="@drawable/ic_outline_aspect_ratio_12"
android:id="@+id/img3">
</ImageView>
</LinearLayout>
这是后面的代码
layout_panel.setOnTouchListener(new View.OnTouchListener() {
private int lastAction;
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v,MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// does code to update the position of the layout.
// but this does not fire on click of any imageview
// insdie the layout.
我查看了 onInterceptTouchEvent 但无法弄清楚如何正确使用它。
基本上我应该能够通过在布局内的任何地方触发 onTouch 来拖动布局,而不仅仅是在没有任何子元素的布局部分。如何在不干扰图像视图的 onclick 事件的情况下实现这一点?
希望我的要求很明确。
在此先感谢您的帮助。
解决方法
当您希望父级拦截触摸时,即使单击任何子级,您所做的是通过将 clickable
设置为 false
来禁用子级拦截触摸:
android:clickable="false"
通过设置,触摸事件将传递给直接父级。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。