Canvas无法在Android最新版本4+上运行

时间:2013-06-14 14:33:10

标签: android canvas

我想在活动布局的顶部创建图层,我需要像矩形或圆形一样的洞,像附加的图像。我这样做是通过使用SurfaceView,它在Android上的较低版本上正常工作,但在版本4 +

上没有

[样本截图](https://docs.google.com/file/d/0B3yZokwUGKFgTkM1ek1nZHNyZ2s/edit?usp=sharing

我的代码是

public class SurfacePanel extends SurfaceView implements SurfaceHolder.Callback{

    public SurfacePanel(Context context) {
        super(context);
        init();
    }

    public SurfacePanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.CommonInit();
    }

    private void init() {
        setZOrderOnTop(true); //necessary
        getHolder().setFormat(PixelFormat.TRANSPARENT);
        getHolder().addCallback(this);
        setBackgroundColor(Color.TRANSPARENT);
    }

    public void onDraw(Canvas canvas){
        Path path = new Path();
        path.moveTo(10, 10);
        path.lineTo(115, 10);
        path.lineTo(115, 260);
        path.lineTo(10, 260);
        path.close();

        canvas.clipPath(path, Region.Op.DIFFERENCE);
        canvas.clipRect(150, 30, 200, 100, Region.Op.DIFFERENCE);
        canvas.drawARGB(180, 0, 0, 0);

        super.onDraw(canvas);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

}

有人请帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这可能是因为ICS +默认硬件加速为true,并且在硬件模式下不支持画布上的某些绘图调用,请检查以下内容:

http://developer.android.com/guide/topics/graphics/hardware-accel.html

您可以使用setLayerType

在清单中的应用标记,清单中的每个活动或视图本身将其关闭