要在Android上分配一次图形并在屏幕上移动而不重写像素,您可以使用Canvas和SurfaceView来完成。下面是一个示例代码,演示了如何在屏幕上移动一个矩形:
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity {
private MySurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView = new MySurfaceView(this);
setContentView(surfaceView);
}
@Override
protected void onResume() {
super.onResume();
surfaceView.resume();
}
@Override
protected void onPause() {
super.onPause();
surfaceView.pause();
}
class MySurfaceView extends SurfaceView implements Runnable {
private Thread thread;
private SurfaceHolder surfaceHolder;
private volatile boolean running = false;
private Paint paint;
private int x, y, speedX, speedY, rectSize;
public MySurfaceView(Context context) {
super(context);
surfaceHolder = getHolder();
paint = new Paint();
paint.setColor(Color.RED);
rectSize = 200; // 矩形的大小
x = 0; // 矩形的初始位置
y = 0;
speedX = 10; // 矩形在x轴上的速度
speedY = 10; // 矩形在y轴上的速度
}
public void resume() {
running = true;
thread = new Thread(this);
thread.start();
}
public void pause() {
running = false;
while (true) {
try {
thread.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
while (running) {
if (surfaceHolder.getSurface().isValid()) {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawRect(x, y, x + rectSize, y + rectSize, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
x += speedX;
y += speedY;
if (x <= 0 || x >= canvas.getWidth() - rectSize) {
speedX = -speedX;
}
if (y <= 0 || y >= canvas.getHeight() - rectSize) {
speedY = -speedY;
}
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
上述代码中,我们创建了一个自定义的SurfaceView类(MySurfaceView),并在其构造函数中初始化了画笔(Paint)和矩形的初始位置和速度。在run方法中,我们使用Canvas绘制矩形,并在每次循环中更新矩形的位置。当矩形到达屏幕的边界时,反转速度以便移动到相反的方向。最后,我们使用Thread.sleep方法在每次循环中暂停一段时间,以便控制动画的速度。
这样,您就可以在Android上分配一次图形并在屏幕上移动而不重写像素。