Android 在onDraw()之前,如何获得画布的大小

Android 在onDraw()之前,如何获得画布的大小,android,random,android-canvas,Android,Random,Android Canvas,我发现了一些相关的问题,没有唯一的答案 在我的游戏中,我创建了一个对象。对象(类)在屏幕上的随机位置: public float X=Rnd.nextInt(400)。我想用随机化器替换400 max值 它应该按照以下规则将对象放置在X的某个位置: 画布左边缘+10

我发现了一些相关的问题,没有唯一的答案

在我的游戏中,我创建了一个对象。对象(类)在屏幕上的随机位置:
public float X=Rnd.nextInt(400)。我想用随机化器替换400 max值

它应该按照以下规则将对象放置在X的某个位置:

画布左边缘+10 但是。。尚未调用onDraw()函数。所以我不能在画布上执行getWidth()

我应该如何解决这个问题?i、 e.在调用onDraw之前,检查画布大小的方法是什么?(或者我应该使用屏幕大小吗?如果是,如何使用?)


Thnx

永远不要使用Canvas.getWidth(),因为它不会返回您认为它会返回的内容。此方法返回整个画布的宽度,该宽度通常与窗口宽度相对应。只需使用View.getWidth()即可。

使用以下代码获取屏幕尺寸:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
您可以使用getApplicationContext()获取ctx

如果您使用的api<13,则应使用:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

Sry,Praful,我不明白。我在类中有主游戏面板和类(“apple”),我想使用随机发生器。在MainGamePanel中,我覆盖onDraw()。我应该把你的代码放在哪里?什么是ctx.getSystemService?getSize对于类型display是未定义的?ctx是上下文,请参阅getSize java doc..我该怎么做?在苹果课上?在maingamepanel类中?我得到一个静态引用错误。我的主游戏面板扩展了SurfaceView实现了SurfaceHolder.Callback。。。请详细说明如何做到这一点。谢谢<代码>显示显示=((WindowManager)getContext().getSystemService(Context.WINDOW_服务)).getDefaultDisplay()解决了它。我在扩展SurfaceView的类中使用了它。然后使用:
width=display.getWidth()我能够将宽度放在一个可公开访问的int.ByteMe中,多亏了你的回答,我才能够编写。非常感谢。我不建议使用getContext()或getApplicationContext(),因为活动是上下文的实例,例如:Context Context=this;(如果这是活动)
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();