摘要:思路和都可以设置和设置,两者的区别自行度娘。方法二透明区域透明区域返回其他代码区域补充经过测试发现,当或的大小设置固定值的时候,会出现透明区域点击判断不正确的问题,因此,还需要对获取的图片进行缩放处理
思路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; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2730.html
摘要:注意这些方法中的类属为的方法已经过时,现在推荐使用。当然,重写所有的事件经试验也是可以的,不过要自己判断是否为点击手势。简单的说,就是当在进行事件分发的时候,只有前一个返回,才会触发后一个。 根据Developer中关于viewPager的描述,ViewPager常和Fragment搭配使用,而其最简单的使用方法,可以直接往里面添加view,甚至是ImageView,做成gallery...
摘要:修改记录版本的通知栏消息功能上并未发生变化,右上角的缩减为了。增加了,允许可穿戴设备远程控制通知栏消息。锁屏状态下,可以控制通知栏消息的隐私程度。但是谷歌规定,自定义布局展示的通知栏消息最大高度是。具体适配不正常的机型有。 此文已由作者黎星授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 由于历史原因,Android在发布之初对通知栏Notification的设...
摘要:今天主讲的系列的两个控件都不难,所以一起讲了,分别是和。之所以出现这么久了,不太火,不太常用,估计跟他悬浮有关,容易挡住其他内容。那我们现在就研究改如何在滑动列表时隐藏和显示这个悬浮按钮。其实也非常简单,和修改样式的过程差不多。 今天主讲的Material Design系列的两个控件都不难,所以一起讲了,分别是FloatingActionButton和Snackbar。这个系列都是主讲...
摘要:今天主讲的系列的两个控件都不难,所以一起讲了,分别是和。之所以出现这么久了,不太火,不太常用,估计跟他悬浮有关,容易挡住其他内容。那我们现在就研究改如何在滑动列表时隐藏和显示这个悬浮按钮。其实也非常简单,和修改样式的过程差不多。 今天主讲的Material Design系列的两个控件都不难,所以一起讲了,分别是FloatingActionButton和Snackbar。这个系列都是主讲...
摘要:今天主讲的系列的两个控件都不难,所以一起讲了,分别是和。之所以出现这么久了,不太火,不太常用,估计跟他悬浮有关,容易挡住其他内容。那我们现在就研究改如何在滑动列表时隐藏和显示这个悬浮按钮。其实也非常简单,和修改样式的过程差不多。 今天主讲的Material Design系列的两个控件都不难,所以一起讲了,分别是FloatingActionButton和Snackbar。这个系列都是主讲...
阅读 1989·2021-11-23 09:51
阅读 5265·2021-09-22 15:39
阅读 3192·2021-09-02 15:15
阅读 3349·2019-08-30 15:54
阅读 2197·2019-08-30 15:53
阅读 1255·2019-08-30 14:04
阅读 2312·2019-08-29 18:33
阅读 2189·2019-08-29 13:08