【发布时间】:2014-04-25 19:51:13
【问题描述】:
我有一个应用程序需要使用自定义图像屏蔽整个 RelativeLayout(现在是扩展它的自定义视图)。布局中有许多视图需要通过触摸来访问,并且是动态的。
我已经使用另一个问题的答案成功地掩盖了区域绘图形状:
@Override
protected void dispatchDraw(Canvas canvas) {
Path path = new Path();
int count = canvas.save();
path.addCircle(400, 200, 300, Path.Direction.CW);
canvas.clipPath(path);
super.dispatchDraw(canvas);
canvas.restoreToCount(count);
}
但是,我需要使用图像源作为我的蒙版源,而不是我可以创作的形状。我已经使用 PorterDuff 工具包来更改位图:
Bitmap resizedBitmap = Bitmap.createScaledBitmap(mMask, this.getWidth(), this.getHeight(), false);
Bitmap result = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); //create another bitmap with same height
Canvas mCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mCanvas.drawBitmap(resizedBitmap, 0, 0, paint);
paint.setXfermode(null);
onDrawCanvas.drawBitmap(result, 0,0, paint);
这适用于屏蔽图像,但我需要使用剪辑进行屏蔽(我认为)。有没有办法使用不同的 PorterDuff 模式从该图像派生路径?还是有更简单的方法,就像在 iOS 中可以直接使用图像设置 layerMask 一样?提前致谢。
【问题讨论】:
标签: android android-relativelayout mask