Android:在新 Canvas 上绘图

标签 android android-canvas surfaceview

我通过扩展 View 创建了一个自定义 View 。

    public class CustomView extends View {
        private Canvas canvas2;
        private Bitmap backingBitmap;

在 CustomView 的构造函数中,我有以下代码:

backingBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
canvas2 = new Canvas(backingBitmap);

在 onDraw 中,我有:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(100, 100, 50, paint);
    canvas2.drawCircle(0, 0, 10, paint);
}

我可以看到使用“canvas”对象绘制的圆,但看不到使用“canvas2”对象绘制的圆。 我的理解是,只需要创建一个可变位图并将其作为 Canvas 的支持位图。有人可以指出这里有什么问题吗?

附加问题:自定义 Canvas 对象在屏幕上的何处创建,如何设置其位置?

创建多个 Canvas 的原因:我有一个包含整个屏幕的 SurfaceView。所以,基本上它的 Canvas 覆盖了整个屏幕。我需要在屏幕内制作一个类似窗口的矩形,并且需要在该窗口的范围内设置动画。基本上,如果您在此窗口内转换图像,图像不应绘制在窗口边界之外。

干杯!

最佳答案

我想通了我的理解有什么问题。现在一切都显得如此简单!这link有帮助。

基本上,当我们创建一个 Canvas 对象时,它会创建一个屏幕外的 Canvas 来保存我们的绘图调用。这个 Canvas 对象需要一个可变的 Bitmap 支持,这样所有的绘图最终都会存储到这个 Bitmap 上。绘制完成后,您可以使用绑定(bind)到表面的 Canvas (您在 onDraw 中获得的 Canvas )绘制可变位图。

在我的代码中,我进行了以下更改以使其正常工作。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(100, 100, 50, paint);
    canvas2.drawCircle(25, 25, 25, paint);
    canvas.drawBitmap(backingBitmap, 200, 90, paint);
}

关于Android:在新 Canvas 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876505/

相关文章:

java - android - ProgressDialog 中的 CountDownTimer

android - 多个应用程序,共享同一数据目录

java - 如何从另一个 Activity 创建动态选项卡

android - android中的VideoView和TextureView、Suraceview有什么区别?

android - 在 SurfaceView 上捏合缩放

Android getActiveNotifications 抛出 SecurityException

java - 在 Canvas 中绘制并删除圆圈

android - 阴影仅在外侧曲线上

android - 存储绘图 Canvas 并稍后恢复

Android 在 onlayout 方法中调整另一个 View 的大小