当前位置: 移动技术网 > IT编程>移动开发>Android > ImageButton和ImageView设置点击透明区域不响应

ImageButton和ImageView设置点击透明区域不响应

2018年09月26日  | 移动技术网IT编程  | 我要评论

新邵县政府网,自制卫星电视接收器,特惠酒店联盟

思路

imageview和imagebutton都可以设置background和设置src,两者的区别自行度娘。由于两者的不同,获取它们的图片资源的方法也不同。倘若设置的是background,那么需要先getbackground(),然后把获取到的drawable强制转换为bitmapdrawable,就可以获取bitamp,最后判断event的点击坐标是否在bitmap像素范围里。倘若设置的是src,则需要先getdrawable(),后续步骤和上述一致。除上述方法外,还可以先获取getdrawingcache()然后getbitmap(),在此之前需要先设置setdrawingcacheenabled(true),使用完毕后记得setdrawingcacheenabled(false),防止内存泄漏。

方法一

设置的是background的情况下

如果background是一张图片,则在ontouch中添加:

imageview imageview=(imageview)v;
bitmapdrawable drawable=(bitmapdrawable)imageview.getbackground();
    bitmap bitmap=drawable.getbitmap();
    int x=(int) event.getx();
        int y=(int)event.gety();
        if(x>=bitmap.getwidth()||x<0||y>=bitmap.getheight()||y<0||bitmap.getpixel((x),(y))==0)
        {
            log.i("newby", "透明区域");
            return true;//透明区域返回true
        }

如果background是一个selector,则在ontouch中添加:

imageview imageview=(imageview)v;
bitmapdrawable drawable=(bitmapdrawable)(imageview.getbackground().getcurrent());
       bitmap bitmap=drawable.getbitmap();
    int x=(int) event.getx();
        int y=(int)event.gety();
        if(x>=bitmap.getwidth()||x<0||y>=bitmap.getheight()||y<0||bitmap.getpixel((x),(y))==0)
        {
            log.i("newby", "透明区域");
            return true;//透明区域返回true
        }

设置的是src的情况下

把上述代码中的getbackground换成getdrawable即可。

方法二

imageview imageview=(imageview)v;
imageview.setdrawingcacheenabled(true);
       bitmap bitmap=imageview.getdrawingcache();
    int x=(int) event.getx();
        int y=(int)event.gety();
        if(x>=bitmap.getwidth()||x<0||y>=bitmap.getheight()||y<0||bitmap.getpixel((x),(y))==0)
        {
            log.i("newby", "透明区域");
            return true;//透明区域返回true
        }

//其他代码区域

imageview.setdrawingcacheenabled(false);

补充

经过测试发现,当imageview或imagebutton的大小设置固定值的时候,会出现透明区域点击判断不正确的问题,因此,还需要对获取的图片进行缩放处理

    public static bitmap newbitmap(bitmap bm, int width , int height){
        int bmwidth = bm.getwidth();
        int bmheight = bm.getheight();
        float scalewidth = ((float) width) / bmwidth;
        float scaleheight = ((float) height) / bmheight;
        matrix matrix = new matrix();
        matrix.postscale(scalewidth, scaleheight);
        bitmap newbm = bitmap.createbitmap(bm, 0, 0,bmwidth, bmheight, matrix, true);
        return newbm;
    }

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网