ImageButton和ImageView设置点击透明区域不响应
思路
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;
}
ImageButton和ImageView设置点击透明区域不响应的更多相关文章
- ImageView设置点击效果没有用?ImageView src的图片大小改变不了?
ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...
- 如何扩大ImageView的点击区域
我们在开发中会遇到,给imageview设置点击事件,但是美工切的原始图片一般在24dp左右,这个尺寸点击时会出现不灵敏的情况(点击区域太小). 解决方案: 给imageView设置 scaleTy ...
- Android中Button、ImageButton、ImageView背景设置区别
Button与ImageButton实际两者无关,Button继承自TextView,不支持src;ImageButton继承自ImageView.同一张图片在不设置大小,默认显示时,使用Button ...
- android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...
- Button、ImageButton及ImageView详解
Button.ImageButton及ImageView详解 在应用程序开发过程中,很多时候需要将View的background或者src属性设置为图片,即美观又支持点击等操作.常见的有Button. ...
- Android ListView 嵌套 ImageView,如何响应ImageView的点击和长按事件
http://www.tuicool.com/articles/EZv2Uv 1.先说下嵌套在ListView中的ImageView如何响应点击事件 方法:在imageView中设置onClick属性 ...
- Android的界面组件使用之ImageButton和ImageView,ImageSwitcher和GridView
(一)ImageButton和ImageView ImageButton与Button的功能完全相同,只是ImageButton上显示的是图像,并且每个ImageButton组件都必须指定一个id,以 ...
- ImageView设置边框的两种方式
转载:http://www.2cto.com/kf/201308/239945.html package cc.testimageviewbounds; import android.os.Bundl ...
- easyui的datagrid组件,如何设置点击某行不会高亮该行的方式
easyui的datagrid组件,有些时候我们点击某行不想高亮显示,如何设置点击某行不会高亮该行的方式,有好几种方法可以实现,我举几个,可以根据你具体需求灵活应用: 1.修改easyui的css将高 ...
随机推荐
- GraphQL:你的容颜,十万光年
What? GraphQL 是一种类似于 SQL 的结构化查询语言,由 facebook 于2012年创造,于2015年开源.SQL 在服务端定义,GraphQL 在客户端定义,也就是说 GraphQ ...
- Spring 中初始化一个Bean对象时依赖其他Bean对象空指针异常
1. Bean依赖关系 一个配置类的Bean,一个实例Bean: 实例Bean初始化时需要依赖配置类的Bean: 1.1 配置类Bean @ConfigurationProperties(prefix ...
- ORACLE更新数据时如果有就更新没有就插入
SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 前言 移动端页面调试一直是好多朋友头疼的问题,iOS 由于其封闭的特性和整体较高的性能,整体适配相对好做,调试 ...
- Android动态添加Fragment
Android动态添加Fragment 效果图如下: 项目结构图如下: Fragment1: package com.demo.dongtaifragment; import android.app. ...
- 从零开始学 Web 之 移动Web(八)Less
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- 西门子PLC-1200 SCL语言开发学习笔记 (一)
一.简介和背景 PLC一般使用梯形图开发,但是梯形图适合电工使用而不是程序员使用,对我们来说开发困难,门槛高,幸好PLC的开发标准还带了类pascal的高级语言,在西门子这里叫SCL语言,这对于我们程 ...
- Angular2入门:TypeScript的函数 - 函数定义、可选参数、默认参数和函数重载
- [EZOJ1007] 神奇的三角形
Description 求 \(\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{i}C(i,j)\times (j+1)^m\operatorname{mod}99 ...