2012-02-24 6 views
0

몇 가지 관련 질문을 찾았습니다.onDraw() 전에 캔버스 크기를 얻는 방법

내 게임에서는 객체를 만듭니다. 객체 (클래스)는 화면상의 임의 위치를 ​​취합니다 : public float X=Rnd.nextInt(400);. 400 개의 최대 값을 랜덤 화기로 바꾸고 싶습니다.

은이 규칙에 따라, X를 어딘가에 객체를 넣어해야합니다

캔버스 + 10 < X < 바로 캔버스의 여백의

왼쪽 여백 - 20

하지만 ..이 된 onDraw()는하지 않았습니다 아직 불려왔다. 그래서 canvas에서 getWidth()를 수행 할 수 없습니다.

어떻게 해결해야합니까? 즉, onDraw가 호출되기 전에 캔버스의 크기를 확인하는 방법은 무엇입니까? (아니면 화면 크기를 사용해야합니까? 그렇다면 어떻게해야합니까?)

Thnx!

답변

1
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(); 
+0

Thanks ! 'display = ((WindowManager) getContext(). getSystemService (Context.WINDOW_SERVICE)). getDefaultDisplay();' 해결되었습니다. SurfaceView를 확장하는 클래스에서 사용했습니다. 다음과 같이 : width = display.getWidth();'공개적으로 접근 가능한 int에 너비를 넣을 수 있습니다. –

+0

ByteMe, 귀하의 답변 덕분에 https://play.google.com/store/apps/details?id=happyworx.nl.Applez을 작성할 수있었습니다. 고맙습니다! –

+0

Activity는 Context의 인스턴스이므로 getContext() 또는 getApplicationContext()를 사용하지 않는 것이 좋습니다. Context context = this; (이것이 활동 인 곳) – barwnikk

0

Canvas.getWidth()는 사용자가 생각하는 바를 반환하지 않기 때문에 절대로 사용해서는 안됩니다. 이 메서드는 캔버스 전체의 너비를 반환합니다.이 너비는 대개 창 너비에 해당합니다. 대신 View.getWidth()를 사용하십시오.

+0

어떻게하면됩니까? 사과 수업? maingamepanel 클래스에? 정적 참조 오류가 발생합니다. 내 MainGamePanel은 SurfaceView를 확장하여 SurfaceHolder.Callback을 구현합니다 ...이 작업을 수행하는 방법을 자세히 설명하십시오. thnx –

0

화면 크기를 얻기 위해 다음 코드를 사용

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; 
+0

Sry, Praful, 나는 그것을 얻지 못한다. 클래스에 MainGamePanel과 클래스 ("사과")가 있는데, 난 랜더 마이저를 사용하고 싶습니다. MainGamePanel에서 onDraw()를 재정의합니다. 코드는 어디에 두어야합니까? ctx.getSystemService 란 무엇입니까? 유형 표시에 대한 getSize가 정의되지 않았습니까? –

+0

ctx 컨텍스트를 가져오고 크기를 얻기 위해 [이 링크] (http://developer.android.com/reference/android/view/Display.html#getSize (android.graphics.Point))를 참조하십시오. java doc .. –

관련 문제