好的,所以我想要一个不可见的位图但如果你触摸它,那么触摸的区域就会显示出来。这本身可能看起来不太有用,但我只是想知道如何做到这一点,所以我可以把它应用到我真正想做的事情上。那么你如何在android中只绘制位图的某些像素呢?
答案 0 :(得分:0)
一个很好的起点是罗曼盖伊的"Fun with shaders"食谱,这应该会让你非常接近:
因此,通过在画布上移动形状,您可以显示位图的不同部分。
基本步骤包括:
创建 alpha掩码(链接的示例使用另一个位图):
private static Bitmap convertToAlphaMask(Bitmap b) {
Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8);
Canvas c = new Canvas(a);
c.drawBitmap(b, 0.0f, 0.0f, null);
return a;
}
Bitmap mask;
mask = convertToAlphaMask(BitmapFactory.decodeResource(getResources(), R.drawable.spot_mask));
使用着色器创建一个Paint
实例,以使用以下方式绘制蒙版:
private static Shader createShader(Bitmap b) {
return new BitmapShader(b, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
}
Shader targetShader = createShader(mTargetBitmap);
paint.setShader(targetShader);
最后,使用着色器绘制蒙版:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mMask, 0.0f, 0.0f, mPaint);
}
现在,不要在预定义的路径上设置“光束”的动画(如示例代码中所示),将其连接到触摸事件并从那里开始。即您可能需要跟踪触摸的区域和/或路径以获得所需的效果。