画布方向改变缩放Android

时间:2014-05-09 17:57:37

标签: android canvas drawing orientation scaling

我正在第一次开发一个绘画应用程序。我可以画这样的东西。 但每次方向改变,一切都会丢失。我怎样才能解决这个问题?我一直在互联网上搜索解决方案,但似乎没有找到一个。我知道它必须与视图类中的onSizeChanged事件有关。我已经覆盖了那个事件并且改变了很多,以使它适用于方向更改,但我无法让它工作。 以下是onSizeChanged事件的代码:

private Canvas drawCanvas;
private Bitmap canvasBitmap;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    //View given size
    super.onSizeChanged(w, h, oldw, oldh);
    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    drawCanvas = new Canvas(canvasBitmap);
}

我已经尝试过android:configChanges。但它似乎没有用。

1 个答案:

答案 0 :(得分:3)

我找到了解决这个问题的方法。每次屏幕方向改变时,都会调用事件。所以每次都重新创建位图。我通过在重新创建之前缩放位图然后将其设置为新位图来解决此问题。这样它就会自动缩放,不会丢失任何东西。 现在这是完整的代码:

private Canvas drawCanvas;
private Bitmap canvasBitmap;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    //View given size
    super.onSizeChanged(w, h, oldw, oldh);
    if(canvasBitmap == null){
        canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    }else{
        Bitmap temporary = Bitmap.createScaledBitmap(canvasBitmap, w, h, true);
        canvasBitmap = temporary;
    }
    drawCanvas = new Canvas(canvasBitmap);
}