Java – Android – continuous drawing of shapes to random locations

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
分享
二维码
< <上一篇
下一篇>>