2010-01-20 8 views
0

빠른 질문 - 내가있는 LinearLayout과 I 확장의 통제가 있어요는이안드로이드 드로잉 - 배경 캐싱

 
@Override 
protected void onDraw(Canvas canvas) { 

    super.dispatchDraw(canvas); 

    _background.draw(canvas); 
    _object1.draw(canvas); 
    _object2.draw(canvas); 
    _object3.draw(canvas); 

    // etc... 

} 

모든 40ms가 나는 배경에 postInvalidate()를 호출하고 OnPaint를가 호출되는 등의 OnPaint 메소드의 오버라이드 (override)하고있어 UI 스레드. 문제는 _background.draw가 내 드로잉 시간의 80 % 이상을 차지한다는 것입니다.

그래서 배경을 캐시하고 매번 다시 그리지 않을 수 있습니까?

+0

왜 40ms마다 무효화하고 있습니까? 물체가 배경을 가로 질러 움직이는 지 또는 물체 자체가 변하지 만 동일한 상대 위치에 머무르는가? – RickNotFred

+0

개체가 움직이고 변화하고 있습니다 (움직이는 애니메이션) ... 서있는 순간이 있습니다.하지만 특별한 경우입니다 (시간의 10 % 미만) – kape123

답변

1

postInvalidate()으로 영역을 지정하여 다시 그려지는 영역을 제어 할 수 있습니다.

+0

Uf ... 과부하를 놓쳤을 때 나는 정말로 눈이 멀었습니다. 그래서 나는이 권리를 얻고있다. - 나는 (Rect r : regions)에 대해 여러 개의 영역을 게시 할 수 있으며, onDraw의 모든 것을 새로 고칠지라도 그 부분 만 그릴 것이다.)? - 하나의 LinearLayout을 다른 것에 배치하는 것과 같은 것은 없습니다. 맨 아래에 배경 이미지 넣기, 투명 배경이있는 상단을 무효화하고 마술처럼 움직이는 지 확인하십시오 (안드로이드는 나를 위해 올바른 지역을 무효화합니까?). – kape123

+0

아시다시피, 한 가지 더. 320x480 화면이 있다고 가정합니다. 600x800 크기의 이미지로 canvas.drawBitmap을 호출합니다. 컴파일하기 전에 왼쪽 상단의 320x480 부분 (Photoshop)을 잘라내는 것과 같은 시간에 더 큰 이미지를 그릴 수 있습니까? 도움 주셔서 감사합니다. – kape123

+1

사실, 나는 이것도 처음 접했지만 최대한 빠른 속도로 나아 지려고 노력했습니다. 나는 주로 내가 읽은 것에 근거하여 대답하고있다. Drawables를 여러 레이어에 배치하고 LayerDrawable로 Drawables를 관리 할 수 ​​있습니다. 그것이 나라면, 나는 거기서 시작할 것이라고 생각한다. – RickNotFred

관련 문제