在X轴上设置对象随机位置



我正在创建一个可以随机显示X轴上对象的应用程序,但是以某种方式,我的应用程序开始时崩溃了。

当我使用 displaymetrics 时,它起作用,但是它获得了整个屏幕的宽度。我想获得布局的宽度。但是,当我尝试检索布局宽度并设置随机位置

时,该应用在开始时崩溃了

我感觉计时器在它可以检索布局宽度之前开始。这就是为什么它崩溃

这是代码:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    frame = (RelativeLayout) findViewById(R.id.frame);
    screenWidth = frame.getWidth();
    r = new Random();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    goDown();
                }
            });
        }
    }, 0, 20);
//FUNCTIONS FOR IT TO GO DOWN
public void goDown() {
    //LAYOUT WIDTH
    frameWidth = screenWidth;   
    //DISPLAYING RANDOM X POSITION
    newXposition = r.nextInt(frameWidth);
    //SKULLS FUNCTIONS
    skullY += skullSpeed;
    if(skullY > frameHeight)
    {
        skullY = -100.0f;
        skullX = newXposition - skull.getWidth();
    }
    skull.setX(skullX);
    skull.setY(skullY);
  }

这是我的logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.gin.myapplication, PID: 8786
              java.lang.IllegalArgumentException: n <= 0: 0
                  at java.util.Random.nextInt(Random.java:182)
                  at com.example.gin.myapplication.MainActivity.goDown(MainActivity.java:91)
                  at com.example.gin.myapplication.MainActivity$1$1.run(MainActivity.java:74)

事先感谢您的任何帮助!:D

在Android中,在以后的阶段绘制视图。在此之前,任何用于视图尺寸的getter方法返回零。您需要在阅读其值之前等待在屏幕上绘制视图。您可以通过两种方式进行

在ViewTreeObserver中添加布局侦听器

frame.getViewTreeObserver().addOnGlobalLayoutListener(new 
ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            frame.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            screenWidth = frame.getHeight(); //height is ready
        }
    });

附加邮政运行

frame.post(new Runnable() {
        @Override
        public void run() {
            screenWidth = frame.getHeight(); //height is ready
        }
    });

最新更新