我正在创建一个可以随机显示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
}
});