你能在一个View方法上绘制多个位图吗?

时间:2015-05-14 00:07:46

标签: android canvas bitmap android-animation

目前我正在制作动画,其中有些鱼在四处移动。我已经成功添加了一条鱼并使用canvas和Bitmap使其成为动画。但是目前我正在尝试添加我在Photoshop中制作的背景,每当我将其作为位图添加并将其绘制到画布时,没有背景显示并且鱼开始滞后于屏幕。我想知道我是否需要创建一个新的View类并在不同的画布上绘图,或者我是否可以使用相同的一个?感谢您的帮助! 以下是你们感兴趣的代码:

public class Fish extends View {
    Bitmap bitmap;
    float x, y;

    public Fish(Context context) {
        super(context);
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.fish1);

        x = 0;
        y = 0;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(bitmap, x, y, null);

        if (x < canvas.getWidth())
        {
            x += 7;
        }else{
            x = 0;
        }
        invalidate();

            }

    }

1 个答案:

答案 0 :(得分:0)

您可以根据需要绘制尽可能多的位图。每个都将覆盖先前。因此,先绘制背景,然后绘制其他图像。请确保在主图像中使用透明像素,以便显示背景。

在您的代码中,不要调用Invalidate() - 这是导致Android调用onDraw()的原因,只有在某些数据发生变化且需要重新绘制时才能从其他地方调用。 / p>

您可以执行以下操作,其中View是包含动画的视图:

在您的活动中,将此代码放在onCreate()

myAnimation();

然后

private void myAnimation()
{
  int millis = 50; // milliseconds between displaying frames
  theView.postDelayed (new Runnable ()
  {
    @Override public void run() 
    {  
      theView.invalidate();  
      myAnimation();  // you can add a conditional here to stop the animation
    }
  }, millis);
}