java - 如何在重绘时保存先前绘制到 Canvas 上的对象?

标签 java android graphics android-canvas android-bitmap

每次重绘 SurfaceView 时,之前绘制的内容都会被删除。如何保存它们的状态,以便我的循环将新对象添加到屏幕上而不删除旧对象?

最佳答案

使用位图绘制:

Bitmap mDrawBitmap;
Canvas mBitmapCanvas;
Paint mDrawPaint = new Paint();

@Override
public void onDraw(Canvas canvas) {

    if (mDrawBitmap == null) {
        mDrawBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        mBitmapCanvas = new Canvas(mDrawBitmap);
    }

    // draw on the btimapCanvas
    //... and more
    mBitmapCanvas.drawWhatever(...);

    // after drawing with the bitmapcanvas,
    //all drawn information is stored in the Bitmap       

    // draw everything to the screen
    canvas.drawBitmap(mDrawBitmap, 0, 0, mDrawPaint);
}

这样,“mDrawBitmap”将始终包含当前绘制的状态。如果需要,可以通过调用mBitmapCanvas.drawColor(Color.WHITE);

来清除它

关于java - 如何在重绘时保存先前绘制到 Canvas 上的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376122/

相关文章:

java - 试图将数据加载到 TableView 中的 resultSet Date 上出现 NullPointerException

Android:在不同的 fragment 中调用相同的方法

java - 使用 Maven 和 Dagger 生成的类对 Eclipse 中的 ADT 不可见

java - 如何在java中生成二维曲线

c# - OwnerDrawText模式下TreeView节点文本的定位和高亮

java - 同步块(synchronized block)中的 HashMap 与 Collections.synchronizedMap() 之间有什么区别?

java - Spring 的带注释的 IOC 对于 Guice 人来说是令人困惑的。帮助启发我

java - 在 Java 中使用多个命名空间验证 XML

android - 即使手机上存在文件,MediaScannerConnection.scanFile() 也不会在 Windows 资源管理器中显示文件

java - 获取 Graphics2D?