更改可见性后无法触发触摸事件

3

我有一个相对布局,其中有两个元素。其中一个被隐藏了。类似这样(为例子简化)

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/fullscreenimage"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <AbsoluteLayout
        android:id="@+id/layout_overlay"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:visibility="gone" >

        <ImageView
            android:id="@+id/imageView_option1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_x="0dp"
            android:layout_y="0dp"
            android:src="@drawable/image1"
            android:tag="1" />

        <ImageView
            android:id="@+id/imageView_option2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_x="100dp"
            android:layout_y="0dp"
            android:src="@drawable/image2"
            android:tag="2" />
    </AbsoluteLayout>
</RelativeLayout>

在检测到全屏图像长按(并没有松开手指)后,我想显示这些选项并突出显示用户手指下面的选项。我更改了覆盖布局的可见性,但是选项图像的touchListener从未被调用。尝试从全屏图像的touchlistener中返回false,它始终被调用,但是选项图像上的listener从未被调用。


你的Java代码里有什么? - Amsheer
对于每个 optionView,我都调用了 setOnTouchListener 和 setOnHoverListener 方法,并将其设置为我的实现类实例。然后在长按时,我执行以下操作: mViewOverlay.visibility(VISISBLE); 但是,optionviews 的任何监听器都没有被调用。 - Lubos Horacek
没有代码,就无法理解正在发生的事情。 - Blackbelt
1
由于您具有已弃用的“AbsoluteLayout”及其子项的确切坐标和尺寸,因此可以根据最后一个“TouchEvent”的坐标手动执行相应选项上的单击操作。 - Sherif elKhatib
2个回答

0

ImageViews通常不可点击,除非您明确将它们设置为可点击并触发onClickListeners。

添加

android:clickable="true"
android:enabled="true"

给他们。


我不想要点击监听器。我需要触摸监听器。我希望在更改可见性后,能够在现在可见的视图上获得触摸事件类型为MOVE,该视图出现在我的手指下方并且有两个子视图。或者在这些图像视图上。我不想抬起手指。只需稍微按住一会儿,显示菜单,移动到右侧选项,然后松开手指。 - Lubos Horacek
好的!我不认为在触摸过程中更改可见性会将事件向下传递到可见视图,就像你发现的那样。我会实现一个透明的触摸层,它位于所有内容的上方,并将其用作控制器。 - Ken Wolf
我认为这太复杂了,因为底层图像具有平移和捏合缩放功能,所以委托所有这些操作会增加一定的开销。这就是为什么我尝试使用onTouch或onHover..也许不改变可见性,而是改变透明度会有所帮助。 - Lubos Horacek
如果布局是不可见或已消失,您将无法获取它的事件,例如onclick。我会做其他事情。尝试将您的AbsoluteLayout放入另一个布局中。这样它就会有特定的尺寸(如您所希望的),然后将其设置为可点击。设置它的OnClickListener,如果您长按,编写代码使您的绝对布局可见。你跟上我吗? - deadfish

0

你必须像Ken Wolf所说的那样更改可点击属性。

layout_overlay.setClickable(false)


将设置 onClickListener 的 clickable 属性自动设置为 true。请查看 View 的源代码。 - Lubos Horacek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接