java - Android - 连续绘制形状到随机位置

标签 java android animation bitmap android-canvas

我对安卓动画有点陌生。我正在做一个项目,该项目将球的图片放在随机位置 - 之后它会绕圈移动。到目前为止,我一直很成功,但现在我想在不同的随机坐标上不断绘制新形状。我考虑过使用线程每隔几秒绘制一次形状,但我似乎无法在不搞砸一切的情况下实现它。

有谁知道我该如何解决这个问题?我也知道每次我都必须不断地重新设置我的随机坐标。有谁知道我该怎么做?谢谢你的帮助。我的代码如下:

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();
}

最佳答案

想法:

  1. 实现 Runnable 和处理程序
  2. 通过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/

相关文章:

java - 在改造中处理超过 1 个响应

android - 当具有可选文本的 TextView 成为焦点时,停止 ScrollView 滚动

android - 铛++ : error: linker command failed with exit code 1 Qt Android

delphi - GIF动画TImage/Timage32

Java:将公共(public)类方法公开给同一项目的所有包,但对其他项目私有(private)

JavaFX:禁用 TableView 列中的默认排序

javascript - js图像落入位置

c# - ControlTemplate Storyboard 颜色动画问题

java - RequestDispatcher.forward 到媒体文件?

javac错误: "Cannot find symbol"