2012-02-09 7 views
2

필자는 드로잉을 만들거나 그릴 필요가있을 때까지 내 캔버스의 크기가 오래 갈 것입니다.드로잉하지 않고 캔버스 높이 가져 오기

final SurfaceHolder holder = getHolder(); 

    try 
    { 
    Canvas canvas = holder.lockCanvas(); 
    if(canvas != null) 
    { 
     onDraw(canvas); 
     holder.unlockCanvasAndPost(canvas); 
    } 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 

그러나 단순히 높이를 얻기를 위해 너무 많은 일을처럼이 보인다 :

내가 알고있는 (또는의 어설픈 지식을 가지고) 유일한 캔버스 코드는 이것이다. WhatHeightWillMyCanvasBeWhenIMakeOne()과 같은 함수가 있습니까?

편집 : ... 그런 기능이 없다면, 일시적으로 높이를 물어보고 필요하다면 캔버스를 가져 오는 데 필요한 최소한의 코드는 무엇입니까?).

답변

1

onDraw를 재정의하고 일부 캔버스 잠금 및 게시를 수행 할 때까지 drawable-screen-area 크기의 캔바스를 얻을 수 없습니다. (내가 이해하는 것에서)

@Override 
public void run() { 

     while (running) { 
      Canvas c = null; 

      try { 
        c = view.getHolder().lockCanvas(); 
        synchronized (view.getHolder()) { 
          view.onDraw(c); 
        } 
      } finally { 
        if (c != null) { 
          view.getHolder().unlockCanvasAndPost(c); 
        } 
      } 

      try { 

          sleep(10); 
      } catch (Exception e) {} 
     } 
} 

이제 루프에서 그리기를 호출하면 캔버스로 전송됩니다. 이제 사용자 정의보기에서 onDraw 메서드 만 구현하면됩니다.

@Override 
protected void onDraw(Canvas canvas) { 
    int h = canvas.getHeight(); 
    int w = canvas.getWidth(); 

} 

캔버스가 없어도 가능합니다. 먼저 정적 소유자가있는 클래스를 선언합니다.

public class Window { 
    public static int WINDOW_HEIGHT; // = to screen size 
    public static int WINDOW_WIDTH; // = to screen size 

} 

다음 기본 시작 활동에 몇 가지 특별한 기능을 호출하십시오. 우리는 누군가 캔버스에 그림을 그리고 바가없는 전체 화면을 원하지 않는다는 것을 본 적이 없으므로 이걸 요청합니다. 전체 화면을 사용하지 않으려는 경우 옵션을 무시하십시오. 정확한 측정 값을 얻으려면 여기서도 숨길 필요가 있습니다. 사용자 정의 내부에서

public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); // <--- or here you can call your custom view 

    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 
    int height = display.getHeight(); 
    Window.WINDOW_HEIGHT = height; 
    Window.WINDOW_WIDTH = width; 
} 

는 호출이

private void CreateWindow(Context context) { 
    Display display = ((WindowManager)  context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    int height = display.getHeight(); 


    Window.WINDOW_HEIGHT = height; // = to screen size 
    Window.WINDOW_WIDTH = width; // = to screen size 

} 
처럼 만들 수있는보기
관련 문제