自定义图片,切圆角、圆形,增加渐变颜色阴影
一、先上效果图
效果图
二、GitHub
三、思路
1、图片切成圆角(圆形)
2、绘制一个带有渐变阴影的图形
3、融合圆角图片和阴影图形
四、实现(以下是以圆角为例,圆形的类似)
1)图片切成圆角
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Bitmap targetBitmap = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
Canvas targetCanvas = new Canvas(targetBitmap);
mPaint.setShader(bitmapShader);
RectF rect = new RectF(0, 0, imageWidth, imageHeight);
targetCanvas.drawRoundRect(rect, mRadius, mRadius, mPaint);
形成的效果图
圆角
2)绘制一个带有渐变阴影的图形
设置渐变阴影 mPaint.setShadowLayer(mShadowRadius, 1, 1, mShadowColor);
第一个参数:阴影大小;
第二个参数:X轴偏移量;
第三个参数:Y轴偏移量;
第四个参数:阴影颜色;
X、Y轴偏移量都为1时是四周都有阴影
设置paint的颜色和阴影颜色一致,不然会出现黑边 mPaint.setColor(mShadowColor);
mPaint.setColor(mShadowColor);
mPaint.setShadowLayer(mShadowRadius, 1, 1, mShadowColor);
Bitmap target = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(target);
RectF rectF = new RectF(mShadowRadius, mShadowRadius, width - mShadowRadius, height - mShadowRadius);
canvas.drawRoundRect(rectF, mRadius, mRadius, mPaint);
阴影效果图
3)融合圆角图片和阴影图形
上代码之前先上一个图像合成效果示意图
图像合成效果示意图
好了,上面就是图像融合的一些方式,我用的是SRC_OVER。记得把paint设置的shadowLayer去掉
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
mPaint.setShadowLayer