Android: 透明背景imageView重叠点击问题

Android: clicking issue of overlapping imageViews with transparent background

我有两个部分重叠的可点击 imageView,假设一个大的在底部作为基础,小的在它的右上角。示例视图:this。黑色圆圈是我在获取大图像的听众时遇到问题的地方。

问题是,透明区域是不可见的,但仍然存在,导致onTouch动作不是这样"accurate"。例如。点击重叠区域,小图透明,大图不透明,会检测到小图,但我想要的是检测到大图。

使用 onTouchListener 捕捉颜色使透明区域不可点击也无济于事。

请问我该如何解决?

ImageView big, small;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_seventh);

    big = (ImageView) findViewById(R.id.imageViewBig);
    small = (ImageView) findViewById(R.id.imageViewSmall);

    big.setOnTouchListener(this);
    small.setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {

        switch (v.getId()) {
            case R.id.imageViewBig:
                Toast.makeText(this, "Big", Toast.LENGTH_SHORT).show();
                break;
            case R.id.imageViewSmall:
                Toast.makeText(this, "Small", Toast.LENGTH_SHORT).show();
                break;
            default:
                Toast.makeText(this, "none", Toast.LENGTH_SHORT).show();
        }
    }
    return true;
}

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.gamification.gamificationpagestudy.ProgressBar.SeventhActivity">

<ImageView
    android:id="@+id/imageViewBig"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:clickable="true"
    android:src="@drawable/germany" />

<ImageView
    android:id="@+id/imageViewSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignEnd="@+id/imageViewBig"
    android:layout_alignRight="@+id/imageViewBig"
    android:layout_alignTop="@+id/imageViewBig"
    android:clickable="true"
    android:src="@drawable/brazil" />

</RelativeLayout>

感谢 Dreo 的建议 :D

继续使用onTouchListner获取透明区域,同时获取被触摸的View的中点以检查左下角或右下角区域是否被触摸,然后执行您的操作,在我的例子中左下角是我的GridView的项目在位置0 , 右下角是位置 1 的项目:

if (color == Color.TRANSPARENT) {

    int touchX = (int) event.getX();
    int touchY = (int) event.getY();
    int middle_width = v.getWidth()/2;
    int middle_height = v.getHeight()/2;

    if (touchX < middle_width && touchY > middle_height) // bottom left
       Toast.makeText(GamificationMainActivity.this, gvAdapter.getItem(0), Toast.LENGTH_SHORT).show();

    else if (touchX > middle_width && touchY > middle_height) // bottom right
       Toast.makeText(GamificationMainActivity.this, gvAdapter.getItem(1), Toast.LENGTH_SHORT).show();

      return true;

   } else { //... }