我倾向于增加命中矩形的顶部区域。
我指的是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
是我感动的目标。
以下是我的布局如何
上述布局的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
我希望触摸也会起作用,即使我轻触currency_exchange_linear_layout
。这是因为我有代码r.top -= 10;
来扩展我的触摸区域。 但是,它无法按预期工作。
奇怪的是,如果我远离currency_exchange_linear_layout
,触摸事件将被错误触发。这不是我所期待的。
知道为什么会出现这种奇怪的行为吗?我的TouchDelegate
代码有什么问题吗?
以下是示例代码,用于演示上述问题:https://www.dropbox.com/s/1wzu2w5dtpu6z5o/MyApplication2.zip?dl=0
答案 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