您的位置:首页 > 移动开发 > Android开发

android 自定义view(二)

2016-01-12 15:14 519 查看
有个项目要求对图片的周围进行模糊处理:

问题:

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);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: