2011-08-17 2 views
0

나는 LinerLayout을 확장하고보기에 많은 요소를 추가하는 클래스를 만들고, 또한 등의 원을 추가합니다. onTouchEvent를 구현할 때 확실하지는 않지만 canvas.drawCircle (100, 100, 10) 해당 요소 만 다시 그리는 방법 (원). 어느 매개 변수를 "Rect"에 설정하여 invalidate (Rect)로 보낼 수 있는지 알려줍니다.android how to invalidate (Rect)

감사합니다.

답변

2

구체적인 예를 들어,이 코드 예제는 사용자가 원하는대로 수행합니다. 좌표를 변수 (cx, cy, r)로 옮겼습니다. 언급 한 내용에 따라 LinearLayout 하위 클래스에서 호출 할 것이라고 생각합니다.

int cx = 100; 
    int cy = 100; 
    int r = 10; 

    canvas.DrawCircle(cx, cy, r); 

    int l = cx - r - 1; 
    int t = cy - r - 1; 
    int r = cx + r + 1; 
    int b = cy + r + 1; 

    Rect bounds = new Rect(l, t, r, b); 
    invalidate(bounds); 

전 영역이 무효화되도록하기 위해 모든면에 여분의 픽셀을 원을 약간 겹치게 추가했습니다. 내 경험에 비추어 볼 때, 음수 값이나 캔버스의 크기를 초과하는 값을 포함 할 수있는 것처럼 보입니다.

+0

확인이 지금은 더 많은 질문을 가지고 많은 도움 감사합니다. 1. 그 원에서 canvas.drawText로 만든 텍스트 마녀를 가지고 있으므로이 다시 그리기와 그 텍스트를 볼 수 있습니다. 내가 canvas.drawBitmap (비트 맵, 100, 100, 페인트)로 이미지를 만들 때 2. 어떻게 이미지의 폭과 높이 나는 비트 맵 개체에 그것을 할 수있는 방법을 정의하거나 내가 감사 – Kec

+0

답변 canvas.drawBitmap에 그것을 할 수 있습니다 : 1을) 포함하는 LinearLayout로 무효화를 실행하면 무효화 사각형 내에있는 텍스트가 다시 그려집니다. 2) canvas.drawBitmap의 여러 버전이 있습니다. 언급 한 버전은 비트 맵 객체의 너비/높이를 사용합니다. 캔버스에서 페인팅 할 때 비트 맵을 다른 크기로 조절하려면 public void drawBitmap (비트 맵 비트 맵, Rect src, Rect dst, 페인트 페인트)을 사용해보십시오. – mportuesisf

+0

고마워요.이 방법을 시도해 보겠습니다. – Kec