我试图让一个简单的球在屏幕上移动。我有球作为位图,我为 x 和 y 值设置了字符串。我有一个小代码说,如果 x 小于宽度加 10,直到它变大,然后重置为 0。Y也一样。但是球根本不会在屏幕上移动。
为什么我的球不会移动?
`package com.example.spader.gamer;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;
/**
* Created by Spader on 2/10/2016.
*/
public class drawingTheBall extends View {
Bitmap bBall;
int x, y;
public drawingTheBall(Context context) {
super(context);
bBall = BitmapFactory.decodeResource(getResources(), R.drawable.bball);
x = 0;
y = 0;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect ourRect = new Rect();
ourRect.set(0, 0, canvas.getWidth(), canvas.getHeight() / 2);
Paint blue = new Paint();
blue.setColor(Color.BLUE);
blue.setStyle(Paint.Style.FILL);
canvas.drawRect(ourRect, blue);
if (x < canvas.getWidth()){
x += 10;
}else{
x = 0;
}
if (y < canvas.getHeight()){
y += 10;
}else{
y = 0;
}
Paint p = new Paint();
canvas.drawBitmap(bBall, x, y, p);
invalidate();
}
}
`
你的球不会移动,因为 draw() 方法的唯一职责是使用给定的 Canvas 使视图显示它应该显示的内容。 Android 会在准备好显示视图内容时调用 draw(),并且只有这样。 这通常发生在视图层次结构通过布局传递或某些内容使视图无效之后。 Android 不会在循环中调用 draw。
如果需要动画,则应由可能存在于活动中的代码或某种其他类型的控制器类型对象来管理该逻辑,以确保绘制最终将根据需要进行动画处理的频率进行调用。 您还可以使用 ViewPropertyAnimator 执行整个视图的基本动画,但看起来您希望视图处理其自己的所有项目定位和呈现。