Android 设置图片 Bitmap任意透明度
2015-09-24 20:02
501 查看
两种思路,第一种思路是通过对Bitmap进行操作,将Bitmap的像素值get到一个int[]数组里,因为在android里Bitmap通常是ARGB8888格式,所以最高位就是A通道的值,对齐进行改变后再新建一个Bitmap即可。第二种思路是通过设置canvas的paint的透明度,然后通过canvas.drawBitmap()来改变View的透明度。具体代码如下:
第一种思路:
上述代码经本人亲测可用,修正了链接 的两个错误。number的范围是0-100,0表示完全透明即完全看不到。可以看到最关键的一步是argb[i]
= (number << 24) | (argb[i] & 0x00FFFFFF); 通过(argb[i] & 0x00FFFFFF)将第i点的像素的A通道置为0,然后和(num<<24)进行或操作。移位参见 链接
第二种思路:
示例代码:
关于canvas.drawBitmap详见 链接
两种方法各有用途,哪个方面用哪。
转自:http://blog.csdn.net/yanzi1225627/article/details/29661935
第一种思路:
public static Bitmap getTransparentBitmap(Bitmap sourceImg, int number){ int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()]; sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0, sourceImg .getWidth(), sourceImg.getHeight());// 获得图片的ARGB值 number = number * 255 / 100; for (int i = 0; i < argb.length; i++) { argb[i] = (number << 24) | (argb[i] & 0x00FFFFFF); } sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg .getHeight(), Config.ARGB_8888); return sourceImg; }
上述代码经本人亲测可用,修正了链接 的两个错误。number的范围是0-100,0表示完全透明即完全看不到。可以看到最关键的一步是argb[i]
= (number << 24) | (argb[i] & 0x00FFFFFF); 通过(argb[i] & 0x00FFFFFF)将第i点的像素的A通道置为0,然后和(num<<24)进行或操作。移位参见 链接
第二种思路:
示例代码:
class drawCanvas extends View { public drawCanvas(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 取得Resource 图片的Bitmap Bitmap vBitmap = BitmapFactory.decodeResource( this.getResources() , R.drawable.icon ); // 建立Paint 物件 Paint vPaint = new Paint(); vPaint .setStyle( Paint.Style.STROKE ); //空心 vPaint .setAlpha( 75 ); // canvas.drawBitmap ( vBitmap , 50, 100, null ); //无透明 canvas.drawBitmap ( vBitmap , 50, 200, vPaint ); //有透明 } }
关于canvas.drawBitmap详见 链接
两种方法各有用途,哪个方面用哪。
转自:http://blog.csdn.net/yanzi1225627/article/details/29661935
相关文章推荐
- android:三种菜单(Menu)的设置
- Android中attr详解
- Android之手势的识别与处理(双击onDoubleTap、滑动onFling、拖动onScroll)
- Android中的Adapter 详解
- Android事件传递机制、手势检测
- NDK使用步骤
- Android--Gradle的理解
- Android开发环境部署
- Android批量打包-如何一秒内打完几百个apk渠道包
- Android批量打包-如何一秒内打几十个apk渠道包
- Android 手势操作GestureDetector
- android内存文件读写
- Android.mk写法
- 线程池ThreadPoolExecutor使用简介
- android四大组件详解
- Android中自定义弹窗提醒控件
- Android学习实践:7.使用布局文件进行事件绑定
- 编写 Android 触摸屏手势识别程序
- android 的wifi设置
- Android的事件传递(仿下拉刷新)