3

내 사용자 정의보기에서 Canvas.getClipBounds()을 사용하여 내 onDraw 메서드를 최적화하는 방법을 찾고 있습니다. 그래서 (호출 될 때마다 절대적으로 필요한 것을 그리기 만합니다.)Canvas.getClipBounds가 Rect 객체를 할당합니까?

그러나, 나는 여전히 절대적으로 어떤 객체 생성을 피하려고 ... 그러므로

내 질문

입니다 : getClipBounds() 새로운 사각형을가 호출 될 때마다 시간을 할당 하는가? 또는 단순히 하나의 Rect를 재활용하는 것입니까?

새 개체를 할당하는 경우 getClipBounds(Rect bounds)을 사용하여이 비용을 절약 할 수 있습니까?이 경우 자체 대신 전달 된 Rect를 사용하는 것으로 보입니까?


답변

7

에서 봐 가지고 제안하고, 다음과 같이이다 :

/** 
* Retrieve the clip bounds, returning true if they are non-empty. 
* 
* @param bounds Return the clip bounds here. If it is null, ignore it but 
*    still return true if the current clip is non-empty. 
* @return true if the current clip is non-empty. 
*/ 
public boolean getClipBounds(Rect bounds) { 
    return native_getClipBounds(mNativeCanvas, bounds); 
} 


/** 
* Retrieve the clip bounds. 
* 
* @return the clip bounds, or [0, 0, 0, 0] if the clip is empty. 
*/ 
public final Rect getClipBounds() { 
    Rect r = new Rect(); 
    getClipBounds(r); 
    return r; 
} 

을 따라서, 귀하의 질문에 대답 , getClipBounds (Rect bounds)는 하나의 객체 생성에서 당신을 구하지 만, getClipBounds()는 호출 될 때마다 실제로 새로운 Rect() 객체를 생성합니다.

0

에 대한 실제 메소드 선언 "getClipBounds과을()"(당신이있는 ScrollView에 배치 할 때, onDraw는 각 초를 많은 번 호출 할 수 있다는 생각합니까, 조기 최적화 비명 전에)는이

  1. 공공 부울 getClipBounds과 (사각형의 경계는) 그래서 새로운 사각형 당신이 호출 할 때마다 만들어지지 않습니다 . 이이 함수의 인수로 전달할 Rect 객체를 사용합니다. 내가 내가 안드로이드 4.0.1로 캔버스의 소스 코드로 보았다이 enter link description here
+0

무엇? 나는 이해하지 못한다. 내 질문에 쓴 것처럼 두 가지 다른 메서드 호출이 있습니다. 하나는 Rect를 사용하고 하나는 Rect를 사용하지 않습니다. 나는 그렇지 않은 사람에 대해 묻고있다. – yydl

+0

불편을 끼쳐 드려 죄송 합니다만, 메소드가 호출 될 때마다 Rect 객체를 생성하지 않으려면이 메소드 getClipBounds (Rect bounds)를 사용해야합니다. – appdroid