在使用自定义视图的画布上设置位图动画时遇到问题

时间:2015-04-26 06:55:23

标签: android animation canvas bitmap

我正在尝试使用自定义视图(称为MyView)来模拟动画。我试图显示在屏幕上移动的位图。我的计划是让View的onDraw方法在给定的x,y处绘制位图。我可以递增x并重绘位图。这是一些代码:

MyView的

public class MyView extends View {
    private Bitmap block;

    public MyView(Context context) {
        super(context);
        this.block = BitmapFactory.decodeResource(getResources(), R.mipmap.block);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.BLACK);

        //block is a bitmap of a block…
        canvas.drawBitmap(block, MainActivity.x, 100, null);
    }
}

MainActivity

public class MainActivity extends ActionBarActivity {

    public static int x = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyView myView = (MyView) findViewById(R.id.canvas);
        myView.invalidate();

        Button butt = (Button) findViewById(R.id.butt);
        butt.setOnClickListener((v) - > {
            for (int i = 0; i < 10; i++) {
                x += 10;
                myView.invalidate();
                SystemClock.sleep(500);
            }
        });
    }

所以,我看到我的block坐在屏幕的左侧,到目前为止一直很好。当我按下按钮butt时,我认为会发生的是,我会看到block以2 FPS在屏幕上移动的5秒动画。

相反,屏幕上没有任何变化的延迟为5秒,然后该块向右移动了100个像素。 for循环中的所有“中间”帧似乎都发生在幕后,我只是看到块在for循环结束时的位置。

那么如何查看“live”动画;如何确保每次调用时屏幕都会更新为无效?

0 个答案:

没有答案