android 自定义view(二)
2016-01-12 15:14
519 查看
有个项目要求对图片的周围进行模糊处理:
问题:
解决方法:需要手动配置软件加速,在View中初始化时添加
解决方法:获取通道图片
解决方法:通道处理不要加上参数
int posY = 50;
int PicWidth,PicHeight;
Drawable dbe = getResources().getDrawable(R.drawable.bar).mutate();
canvas.drawColor(Color.parseColor("#096bb0"));
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN);
canvas.translate(posX + (int)(0.9 * PicWidth/2), posY + PicHeight/2);//图像平移为了刚好在原图后形成影子效果。
canvas.skew(-0.9F, 0.0F);//图像倾斜效果。
canvas.scale(1.0f, 0.5f);//图像(其实是画布)缩放,Y方向缩小为1/2。
dbe.draw(canvas);//此处为画原图像影子效果图,比原图先画,则会在下层。</span>
问题:
1,经常发现paint的各种效果无效
原因:此paint效果不支持硬件加速解决方法:需要手动配置软件加速,在View中初始化时添加
this.setLayerType(LAYER_TYPE_SOFTWARE,null);
2,使用setShadowLayer和setMaskFilter处理.png图片无效
原因:没有对图片进行通道处理解决方法:获取通道图片
bitmap.extractAlpha()
3,获取通道图片后模糊效果产生位移
原因:通道处理方法不对解决方法:通道处理不要加上参数
bitmap.extractAlpha(paint, null)//会产生位移
bitmap.extractAlpha()
过程
方式1:使用setColorFilter将过滤后的图形进行处理可以得到阴影效果
<span style="font-size:14px;">int posX = 20;int posY = 50;
int PicWidth,PicHeight;
Drawable dbe = getResources().getDrawable(R.drawable.bar).mutate();
canvas.drawColor(Color.parseColor("#096bb0"));
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN);
canvas.translate(posX + (int)(0.9 * PicWidth/2), posY + PicHeight/2);//图像平移为了刚好在原图后形成影子效果。
canvas.skew(-0.9F, 0.0F);//图像倾斜效果。
canvas.scale(1.0f, 0.5f);//图像(其实是画布)缩放,Y方向缩小为1/2。
dbe.draw(canvas);//此处为画原图像影子效果图,比原图先画,则会在下层。</span>
方式2:使用setShadowLayer方法设置阴影层,可以得到阴影效果,对阴影层颜色改变可以得到模糊效果
<span style="font-size:24px;"> Paint paint=new Paint(); paint.setColor(Color.WHITE); Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.bar); paint.setShadowLayer(blurRadius,20,20,Color.WHITE); canvas.drawBitmap(bitmap.extractAlpha(), 400, 0, paint); canvas.drawRoundRect(new RectF(30,30,300,300),10,10,paint);</span>
方式3:使用setMaskFilter对图形/图像使用滤镜效果可以得到模糊效果
Paint paint=new Paint(); paint.setColor(Color.WHITE); Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.bar); BlurMaskFilter blurMaskFilter=new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.SOLID); paint.setMaskFilter(blurMaskFilter); canvas.drawBitmap(bitmap.extractAlpha(), 400, 0, paint); canvas.drawRoundRect(new RectF(30,30,300,300),10,10,paint);
相关文章推荐
- Android安全研究经验谈
- Android安全研究经验谈
- android中popupwindow的点滴
- 安卓开发之百度地图定位
- Fresco介绍 - 一个新的android图片加载库
- android选择图片拍照详解(裁剪-旋转-压缩)
- Android 判断一个url是否有效
- Android如何在java代码中设置margin
- Android Studio上NDK/JNI开发环境问题
- Android属性动画完全解析(三)-Interpolator和ViewPropertyAnimator的用法
- android studio 运行出现 com.android.ide.common.process.ProcessException
- Android 监听输入法隐藏与显示状态切换
- [Andorid开发艺术探索 读书笔记]View的事件体系(二)
- 解决更新Android SDK时出现A folder failed to be renamed or moved办法
- Android中定时执行任务的3种实现方法
- Android Studio 快捷键
- Android studio快捷键
- 实现android M 的直接分享
- mac 系统开发android,真机调试解决方案
- 安卓滚动数字的实现(从0开始增加到指定数字)