Android绘制位图的某些像素

时间:2014-08-31 07:36:22

标签: android graphics bitmap

好的,所以我想要一个不可见的位图但如果你触摸它,那么触摸的区域就会显示出来。这本身可能看起来不太有用,但我只是想知道如何做到这一点,所以我可以把它应用到我真正想做的事情上。那么你如何在android中只绘制位图的某些像素呢?

1 个答案:

答案 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);
}

现在,不要在预定义的路径上设置“光束”的动画(如示例代码中所示),将其连接到触摸事件并从那里开始。即您可能需要跟踪触摸的区域和/或路径以获得所需的效果。