【问题标题】:Saving a canvas in a bitmap and then Using that Bitmap将画布保存在位图中,然后使用该位图
【发布时间】:2014-02-25 02:18:52
【问题描述】:

我有一个画布:

Canvas c=null;

还有一个绘制矩形的循环,因为我每次循环都会改变矩形的位置,所以矩形会在屏幕上移动。

int i=0;
while(isRunning){
   i++;
   c=null;
   Paint p=new Paint();
   p.setColor(Color.BLACK);
   c.drawRect(i,i,i+5,i+5,p);
}

我想创建一个背景,对于这个例子(整个屏幕上的一个大蓝色矩形):

   Paint backgroundP=new Paint();
   backgroundP.setColor(Color.BLUE);
   c.DrawRect(view.getLeft(),view.getTop(),view.getRight().view.getBottom(),backgroundP);

背景是在循环之前创建的(在我创建移动的矩形之前)。

现在我要做的是将带有背景的画布(蓝色大矩形)保存在位图上,然后在循环中绘制在位图上移动的小矩形,这样它就会绘制矩形,它将移动并绘制背景(因此会有移动的矩形和背景)

如何在位图上保存画布,然后在循环中的画布上绘制该位图?

如果您不介意,请发布我在示例中描述的代码。

【问题讨论】:

    标签: android bitmap android-canvas


    【解决方案1】:

    如果你只是想在纯色背景上画一个矩形,你可以试试这个:

    private Paint rectPaint = new Paint();
    private Rect rect = new Rect(0, 0, 5, 5);
    
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLUE);
        canvas.drawRect(rect, rectPaint);
    }
    

    此代码尚未移动您的矩形。您可以使用以下方法为先前定义的矩形添加偏移量,从而将其移动到画布上。

    public void moveRect(int dx,int dy){
        rect.offset(dx, dy);
    }
    

    这究竟应该发生在哪里取决于您的代码的其余部分。 (也许每次 onDraw() 都会被调用?)

    如果你的目标是在画布上绘制不同的位图,你应该试试这个方法

    canvas.drawBitmap(bitmap, left, top, paint);
    

    为此,您可以从资源中加载位图:

    Bitmap backgroundBitmap = BitmapFactory.decodeResource(context,
                R.drawable.your_background_bitmap);
    

    或初始化一个空位图并使用 Canvas 绘制到该位图:

    Bitmap backgroundBitmap = Bitmap.createBitmap(getWidth(), getHeight(),
                Config.ARGB_8888);
    Canvas backgroundCanvas = new Canvas(backgroundBitmap);
    backgroundCanvas.drawColor(Color.BLUE);
    

    如果您有更多关于您的代码的信息(例如自定义视图、游戏循环),我可以帮助您提供更准确的答案。

    【讨论】:

      【解决方案2】:

      您不将画布保存到位图,而是让画布从头开始写入位图。

      Canvas canvas = new Canvas(bitmap);
      

      这将使画布写入内存位图。然后只需使用该画布进行绘制即可。

      【讨论】:

      • 但它不会在每一轮循环中更改位图吗?我的意思是它不仅可以保存背景,还可以保存移动循环中每个 rouud 的矩形?所以不是移动矩形,而是复制它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多