我正在尝试使用自定义视图(称为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”动画;如何确保每次调用时屏幕都会更新为无效?