我有一个如下所示的布局:
我正在尝试扩展绿色视图的可点击区域。我用于此目的的代码是:
public static void setTouchDelegate(View view, float dimen) {
final View parent = (View) view.getParent();
parent.post( () -> {
final Rect delegateArea = new Rect();
view.getHitRect(delegateArea);
delegateArea.right += dimen;
delegateArea.left -= dimen;
delegateArea.bottom += dimen;
delegateArea.top -= dimen;
parent.setTouchDelegate( new TouchDelegate( delegateArea , view));
});
}
红色区域是绿色视图的父级。问题是,无论我试图设置多大的TouchDelegate,它总是只适用于父红色区域。我可以覆盖整个红色区域以便点击,但我无法将可点击区域扩展到蓝色区域。
我的假设是,这不是我的代码中的问题,而是TouchDelegate的正常行为。
问题是:如何在下面的预览中为绿色视图设置看似紫色区域的可点击区域?
//编辑:
这是项目的布局 - 带文本的红色矩形和绿色的ImageButton:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_red_dark"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:gravity="center_vertical"
android:paddingBottom="3dp"
android:paddingLeft="10dp"
android:paddingRight="4dp"
android:paddingTop="3dp">
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingRight="18dp"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold"
tools:text="Test" />
<ImageButton
android:id="@+id/item_green"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:background="@android:color/transparent"
android:src="@android:color/holo_green_light" />
</FrameLayout>
答案 0 :(得分:0)
基本上,您需要设置相对于视图祖先的委托区域,并在此祖先上设置TouchDelegate。
图像中的目标祖先是蓝色背景的视图。
1 2 3 4
1 [A,A] [B,D] [C,G] [D,J]
2 [A,B] [B,E] [C,H] [D,K]
3 [A,C] [B,F] [C,I] [D,L]
由于原始版本https://gist.github.com/patrickhammond/6d49e9ac08f96bd8d302#gistcomment-2385782中的错误,最好使用修改后的TouchDelegate。