Java – Android – continuous drawing of shapes to random locations
•
Android
I'm a little new about Android animation. I'm working on a project to put a picture of a ball in a random position - and then it will move in a circle. So far, I've succeeded, but now I want to constantly draw new shapes in different random coordinates. I'd like to use a thread to draw shapes every few seconds, but I can't seem to achieve it without messing up everything
Who knows how I can solve this problem? I also know that I have to constantly reset my random coordinates every time. Who knows how I do this? Thank you for your help. My code is as follows:
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();
}
}
resolvent:
idea:
>Implement runnable and handler > create random coordinates by 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);
}
}
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码