我对安卓动画有点陌生。我正在做一个项目,该项目将球的图片放在随机位置 - 之后它会绕圈移动。到目前为止,我一直很成功,但现在我想在不同的随机坐标上不断绘制新形状。我考虑过使用线程每隔几秒绘制一次形状,但我似乎无法在不搞砸一切的情况下实现它。
有谁知道我该如何解决这个问题?我也知道每次我都必须不断地重新设置我的随机坐标。有谁知道我该怎么做?谢谢你的帮助。我的代码如下:
public class DrawingTheBall extends View {
Bitmap bball;
int randX, randY;
double theta;
public DrawingTheBall(Context context) {
super(context);
// TODO Auto-generated constructor stub
bball = BitmapFactory.decodeResource(getResources(), R.drawable.blueball);
randX = 1 + (int)(Math.random()*500);
randY = 1 + (int)(Math.random()*500);
theta = 45;
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
//Radius, angle, and coordinates for circle motion
float a = 50;
float b = 50;
float r = 50;
int x = 0;
int y = 0;
theta = theta + Math.toRadians(2);
//move ball in circle
if(x < canvas.getWidth()){
x = randX + (int) (a +r*Math.cos(theta));
}else{
x = 0;
}
if(y < canvas.getHeight()){
y = randY + (int) (b +r*Math.sin(theta));
}else{
y = 0;
}
Paint p = new Paint();
//Implement Thread here
thread = new Thread(new Runnable(){
@Override
public void run(){
for(int j = 0; j <= 60; j++){
//It tells me to change variables to Final
//But if I do that it messes up my if statements above
canvas.drawBitmap(bball, x, y, p);
}
};
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //wait one second
}
}
});
thread.start();
//canvas.drawBitmap(bball, x, y, p);
invalidate();
}
最佳答案
想法:
- 实现 Runnable 和处理程序
通过Random创建随机坐标。
public class DrawingTheBall extends View implements Runnable { final Bitmap bball; Random randX, randY; double theta; Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { invalidate(); System.out.println("redraw"); }; }; public DrawingTheBall(Context context) { super(context); bball = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); randX = new Random(); randY = new Random(); theta = 45; new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); // Radius, angle, and coordinates for circle motion float a = 50; float b = 50; float r = 50; int x = 0; int y = 0; theta = theta + Math.toRadians(2); // move ball in circle if (x < canvas.getWidth()) { x = randX.nextInt(100) + (int) (a + r * Math.cos(theta)); // create // randX // integer } else { x = 0; } if (y < canvas.getHeight()) { y = randY.nextInt(100) + (int) (b + r * Math.sin(theta));// create // randX // integer } else { y = 0; } Paint p = new Paint(); canvas.drawBitmap(bball, x, y, p); } public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(0); } }
关于java - Android - 连续绘制形状到随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858876/