android - 如何在加载 PNG 的 ImageView 的透明部分防止 onClick 方法

标签 android onclick imageview

我目前正在开发一个 Android 应用程序,它显示多个图像(如 ImageView 的)彼此堆叠。以下是图层当前的配置方式:

  • 背景层:缩放整个屏幕,必须可点击
  • 前景层:缩放整个屏幕,必须是可点击的, 包含透明度,允许用户看到一些 背景层

我面临的问题是前景层。我正在将 onClick() 方法分配给 imageview,但是无论它们是否击中了图像的可见部分以及包含透明度的部分,都会调用该方法。我只希望在用户单击该 ImageView 的不透明部分时调用前景 ImageView onClick() 方法。

场景是这样的:

enter image description here

对角线表示前景图像的透明部分。如果用户触摸此空间,我希望它访问背景图像而不是前景图像。感谢您提供的任何帮助。

这是我实现的解决方案(感谢下面的回答):

//ontouchlistener - gets X and Y from event
private void setClick(View view)
{
    view.setOnTouchListener(new View.OnTouchListener() 
    {
        public boolean onTouch(View v, MotionEvent event) 
        {
            int imageId = getImageId((int)event.getX(), (int)event.getY());
            if (imageId >= 0)
                performActions(imageId);
            return false;
        }
    });
}

//get the ID of the first imageview (starting from foreground, 
//working backwards) which contains a non-transparent pixel
private int getImageId(int x, int y)
{
    ViewGroup parent = (ViewGroup) findViewById(R.id.relative_layout);
    for (int a = parent.getChildCount()-1; a >= 0; a--)
    {
        if (parent.getChildAt(a) instanceof ImageView)
            if (!checkPixelTransparent((ImageView)parent.getChildAt(a), x, y))
                return parent.getChildAt(a).getId();
    }
    return -1;
}

//get bitmap from imageview, get pixel from x, y coord
//check if pixel is transparent
private boolean checkPixelTransparent(ImageView iv, int x, int y)
{
    Bitmap bitmap = ((BitmapDrawable) iv.getDrawable()).getBitmap();
    if (Color.alpha(bitmap.getPixel(x, y)) == 0)
        return true;
    else
        return false;
}

最佳答案

This one sample使ImageView的透明区域不可点击。

ImageView :

ImageView imgView= (ImageView) findViewById(R.id.color_blue);
imgView.setDrawingCacheEnabled(true);
imgView.setOnTouchListener(changeColorListener);

OnTouchListener:

private final OnTouchListener changeColorListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Bitmap bmp = Bitmap.createBitmap(v.getDrawingCache());
        int color = bmp.getPixel((int) event.getX(), (int) event.getY());
        if (color == Color.TRANSPARENT)
            return false;
        else {
            //code to execute
            return true;
        }
    }
};

关于android - 如何在加载 PNG 的 ImageView 的透明部分防止 onClick 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15343266/

相关文章:

JavaScript - 在点击时递增地重新定位 DIV

安卓小部件 : imageView onClick listener

android - 如何在phonegap android上隐藏键盘

java - getActivity() 或 getContext() 用于带有 viewpager 的 fragment ?

android - 在电子邮件中制作表格同时在电子邮件中制作备份

PHP 和 JavaScript

javascript - onclick 事件不适用于 javascript 中的链接

android - Titanium 的 Android 模拟器上未显示子 ImageView 、标签和按钮

ios - 添加滤镜时,照片被拉伸(stretch)

android - 恢复列表中的 Activity 实例?