如何检查`onInterceptTouchEvent`中的目标视图

时间:2014-04-27 07:39:02

标签: java android

我有一个难题。我正在用Android编写游戏,在每个游戏开始时我都会显示“提示”。小贴士是一个带有一些文字的盒子和一个小的“x”按钮来关闭它。但是我不希望玩家必须点击x按钮,所以我做了它,所以整个游戏板拦截点击事件并在第一次点击时关闭提示框。

为此,我覆盖了游戏板所在的onInterceptTouchEvent中的RelativeLayout方法来调用方法来关闭提示框,然后允许点击事件过滤到任何孩子被点击。

我的问题是,除了提示框的“X”按钮之外,其他地方都可以。重启按钮恰好位于“X”按钮下方。因此,如果您尝试单击“X”按钮关闭提示,RelativeLayout会看到click事件,调用方法关闭提示框,并且因为“X”按钮不再存在,重启按钮结束被点击(以一种美味的讽刺方式重新启动游戏并提出另一个提示!)。

我无法找到一个干净,愉快的方法来解决这个问题。

这是我的onIntercept方法:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (closeBubbleOnNextClick) {
        gameboardActivity.onCloseSpeechBubble(null);
        closeBubbleOnNextClick = false;
    }
    return false;
}

如果提示的“X”按钮是目标,我无法从MotionEvent中获取目标视图以不关闭提示。我真的不想在该方法中禁用重置按钮,因为根据设备大小,“X”按钮可能完全在不同的按钮上(如主页按钮),我看不到好的方法无论如何都要创建一个回叫来重新打开它。

我不想做一些事情,比如运行方法来关闭在单独的线程上延迟的提示按钮,因为它会导致一个奇怪的延迟,当提示框消失,或者容易失败取决于设备性能。

有没有人知道在任何点击上关闭提示框的简洁方法,除了提示框的“X”按钮上的点击?

这是提示框。它只是一个FrameLayout,里面有一些视图。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/speech_bubble_wrapper"
    style="@style/TutorialBubble"
    android:padding="@dimen/default_margin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <!--
    Ideally, the x button's touch box should be increased in size
    whenever this view is inflated
    -->

    <ImageView
        android:id="@+id/speech_bubble_image"
        android:layout_width="@dimen/speech_bubble_width"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/speech_bubble" />

    <com.ponyseeker.models.ui.PonyTextView
        android:id="@+id/speech_bubble_text"
        style="@style/PonyFontBody"
        android:layout_width="@dimen/speech_bubble_width"
        android:layout_gravity="center_horizontal"
        android:padding="@dimen/speech_bubble_text_margin"
        android:textSize="@dimen/speech_bubble_text_size" />

    <ImageView
        android:id="@+id/speech_bubble_x"
        android:layout_width="@dimen/speech_bubble_x_width"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right"
        android:adjustViewBounds="true"
        android:onClick="onCloseSpeechBubble"
        android:src="@drawable/speech_bubble_x" />

</FrameLayout>

0 个答案:

没有答案