从画布上的单个位图绘制多次

时间:2012-10-03 18:41:44

标签: android view bitmap draw

基本上我有以下位图: 位图云; cloud = BitmapFactory.decodeResource(getResources(),R.drawable.cloud);

我想要做的是在画布上的不同(随机)位置多次绘制相同的位图(在本例中为云)。我想在我的视图的OnDraw方法中执行此操作。

所以最终产品应如下所示: http://puu.sh/1b4fe

然而

这是在同一画布上多次绘制位图的代码:

protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);

    // canvas.drawColor(Color.BLUE);
    //drawBackground(canvas);

    //objectMovement(canvas);

    for (int i = 0; i < 500; i += 50) {
        canvas.drawBitmap(cloud, 50 + rand.nextInt(350),
                10 + rand.nextInt(350), null);
    }

    invalidate();
}

如您所见,我使用随机生成位图的位置,并且每次在画布上的不同位置绘制位图。

唯一的问题是,每次调用invalidate()时,for循环中的绘图都会再次发生。因此,看起来图纸(云)在整个地方移动得非常快。

搜索了一会后,我发现了这个问题: Draw multiple times from a single bitmap

这与我的问题几乎是同一个问题,但不幸的是,那里没有正确答案。

那我该如何实现呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

第一个问题是你每帧读取位图10次,这是完全没必要的。实例化类时,应该一次读取位图。我还添加了一个Paint。我不知道这是否完全必要,但只是因为你决定在你的抽奖方法中做更多的事情。

public class MyView extends View
{
    private Bitmap _cloud;
    private Paint _paint;

    public MyView(Context context)
    {
        super(context);
        _cloud = BitmapFactory.decodeResource(getResources(),R.drawable.cloud);
        _paint = new Paint();
    }

    protected void onDraw(Canvas canvas) 
    {
        for(int i = 0; i < 500; i += 50) 
        {
            canvas.drawBitmap(_cloud, 50 + rand.nextInt(350rand.nextInt(350)), 10 + i, _paint);
        }
    }
}