我想做个显示效果是圆形的ImageView,实现思路就是override onDraw()方法,在里面先后画两幅图,一个圆形,一个原图像,然后叠加取交集,预期效果是原图像只显示出圆形的大小,达到蒙板效果。
但是我发现实际效果是四个边角不是透明,也就是不是真正显示为圆形ImageView的效果。
我发现如果画之前设置canvas.saveLayer(),就能实现四个边角透明,但是不设置的话,就不行,请问为什么会这样? 代码如下: protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
Log.i("mask", "drawable == null");
return;
}
try {
if (mPaint == null) {
mPaint = new Paint();
mPaint.setXfermode(MASK_XFERMODE);
mPaint.setFilterBitmap(false);
mPaint.setAntiAlias(true);
}
/* 如果加上这句话,就能实现四个角透明 */
// int count = canvas.saveLayer(0.0F, 0.0F, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
drawable.setBounds(0, 0, getWidth(), getHeight()); drawable.draw(canvas);
Bitmap localBitmap = createMask();
canvas.drawBitmap(localBitmap, 0.0F, 0.0F, mPaint);
/* 如果加上这句话,就能实现四个角透明 */ //if (!isInEditMode())
// canvas.restoreToCount(count);
} catch (Exception ex) {
ex.printStackTrace();
}
}
但是我发现实际效果是四个边角不是透明,也就是不是真正显示为圆形ImageView的效果。
我发现如果画之前设置canvas.saveLayer(),就能实现四个边角透明,但是不设置的话,就不行,请问为什么会这样? 代码如下: protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
Log.i("mask", "drawable == null");
return;
}
try {
if (mPaint == null) {
mPaint = new Paint();
mPaint.setXfermode(MASK_XFERMODE);
mPaint.setFilterBitmap(false);
mPaint.setAntiAlias(true);
}
/* 如果加上这句话,就能实现四个角透明 */
// int count = canvas.saveLayer(0.0F, 0.0F, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
drawable.setBounds(0, 0, getWidth(), getHeight()); drawable.draw(canvas);
Bitmap localBitmap = createMask();
canvas.drawBitmap(localBitmap, 0.0F, 0.0F, mPaint);
/* 如果加上这句话,就能实现四个角透明 */ //if (!isInEditMode())
// canvas.restoreToCount(count);
} catch (Exception ex) {
ex.printStackTrace();
}
}
Android博文收集网 http://www.iflya.com