为TouchDelegate放大矩形时的奇怪行为

时间:2015-05-04 14:13:57

标签: android

我倾向于增加命中矩形的顶部区域。

我指的是Is there an example of how to use a TouchDelegate in Android to increase the size of a view's click target?http://developer.android.com/training/gestures/viewgroup.html#delegate

中的代码
final View parentView = v.findViewById(R.id.touch_delegate_linear_layout);
ViewTreeObserver vto = parentView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @SuppressLint("NewApi")
    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {
        final Rect r = new Rect();
        // currencyExchangeLinearLayout is currency_exchange_linear_layout.xml
        currencyExchangeLinearLayout.getHitRect(r);
        r.top -= 10;
        parentView.setTouchDelegate(new TouchDelegate(r , currencyExchangeLinearLayout));

        ViewTreeObserver obs = parentView.getViewTreeObserver();
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            obs.removeOnGlobalLayoutListener(this);
        } else {
            obs.removeGlobalOnLayoutListener(this);
        }
    }
});

touch_delegate_linear_layout是我的父视图。

currency_exchange_linear_layout是我感动的目标。

以下是我的布局如何

enter image description here

上述布局的XML代码如下。

<LinearLayout
    android:id="@+id/touch_delegate_linear_layout"
    ...>

    <LinearLayout
        android:id="@+id/footer_linear_layout"
        ...
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/footer_label_text_view"
            ... />

        <View
            android:layout_width="1px"
            ... />

        <TextView
            android:id="@+id/footer_value_text_view"
            ... />
    </LinearLayout>

    <LinearLayout
        ...
        android:orientation="horizontal" >

        <TextSwitcher
            android:id="@+id/status_bar"
            ... />

        <LinearLayout
            android:id="@+id/currency_exchange_linear_layout"
            ...>

        </LinearLayout>
    </LinearLayout>

</LinearLayout>

如果我在currency_exchange_linear_layout

区域内触摸,它的效果非常好

enter image description here

我希望触摸也会起作用,即使我轻触currency_exchange_linear_layout。这是因为我有代码r.top -= 10;来扩展我的触摸区域。 但是,它无法按预期工作。

enter image description here

奇怪的是,如果我远离currency_exchange_linear_layout,触摸事件将被错误触发。这不是我所期待的。

enter image description here

知道为什么会出现这种奇怪的行为吗?我的TouchDelegate代码有什么问题吗?

演示代码

以下是示例代码,用于演示上述问题:https://www.dropbox.com/s/1wzu2w5dtpu6z5o/MyApplication2.zip?dl=0

1 个答案:

答案 0 :(得分:0)

出现这种行为的原因是currency_exchange_linear_layout <{1}}

因此,当我们执行

touch_delegate_linear_layout

获得的矩形坐标与currencyExchangeLinearLayout.getHitRect(r);

无关

在这种情况下,我们可以使用touch_delegate_linear_layout的点击矩形,其矩形的Y坐标相对于footer_value_text_view

touch_delegate_linear_layout