2011-03-18 4 views
6

저는 그래픽 워크 플로 편집기 인 "실제"안드로이드 응용 프로그램을 처음으로 작업하고 있습니다. 드로잉은 View 클래스의 하위 클래스 인 사용자 정의 클래스에서 수행됩니다. 이때 요소는 캔바스에 그려진 사각형입니다. 요소의 동작을 감지하기 위해 좌표를 비교하고 터치 위치의 요소를 확인합니다. 사용자 정의보기의 중심 확대 - 캔버스 좌표 계산

내가 4 인수 canvas.scale (...)를 중심으로 줌 잘 작동 기능 http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

을 시도 줌 제스처를 구현하기 위해,하지만 난 캔버스를 계산하는 능력을 잃게 mPosX 오프셋 사용하여 좌표 줌 후 터치가 요소에 있는지 여부를 감지하는 mPosY. 내가 오프셋 참조를 잃지 않고이 작업을 수행 할 수있는 방법에 대한 예를 찾을 수 없습니다

canvas.save(); 
canvas.translate(mPosX, mPosY); 
canvas.scale(mScaleFactor, mScaleFactor, mScalePivotX, mScalePivotY); 
//drawing .... 
canvas.restore(); 

:

나는 함께 줌 제스처에 캔버스를 중앙에 위의 블로그 게시물의 예를 변경하려 좌표를 계산합니다. 쉬운 해결 방법이 있습니까? 제스처 중심과 배율 인수로 오프셋을 계산하려했지만 실패했습니다 :/

ImageView를 사용하는 다른 예제에서는 종종 이미지를 변환하기 위해 매트릭스를 사용하는 것으로 나타났습니다. 이 작업을 사용자 정의보기 및 캔버스로 수행 할 수 있습니까? 그렇다면 좌표를 확인하기 위해 x 및 y 오프셋을 어떻게 얻을 수 있습니까?

또한 내 생각이 완전히 틀린 경우 제대로 수행되는 방법에 대한 사례를 보니 매우 기쁩니다.

Thx! ;)

+0

안녕하세요, 저는 줌 센터링 문제에 직면하고 있습니다. 현재 그것을 (0,0) 점으로 이동하고이 메서드는 canvas.scale (scaleFactor, scaleFactor); 사용하고 있습니다. ScalePivotX와 scalePivotY를 어떻게 계산하고 있습니까? 감사합니다. – sajjoo

답변

3

아마도 다음 코드는 제스처 중심 및 배율 인수로 좌표를 계산하는 데 도움이됩니다. 나는 opengl-sprite를 나타내는 클래스에서이 메서드를 사용한다.

void zoom(float scale, PointF midPoint) { 
    if (zoomFactor == MAX_ZOOM_FACTOR && scale > 1) return; 
    if (zoomFactor == MIN_ZOOM_FACTOR && scale < 1) return; 

    zoomFactor *= scale; 
    x = (x - midPoint.x) * scale + midPoint.x; 
    y = (y - height + midPoint.y) * scale + height - midPoint.y; 
    if (zoomFactor >= MAX_ZOOM_FACTOR) { 
     zoomFactor = MAX_ZOOM_FACTOR; 
    } else if (zoomFactor < MIN_ZOOM_FACTOR) { 
     zoomFactor = MIN_ZOOM_FACTOR; 
     x = 0; 
     y = 0; 
    } 
} 

X 및 Y 좌표로 인해는 OpenGL의 방향 (위 오른쪽) 좌표계 중간 좌표계 (오른쪽 아래) 사이의 구별, 다른 방식으로 처리된다. midPoint는 MotionEvent 님의 좌표계에서 취합니다.

다른 모든 작업은 이해할 수 있습니다.

희망이 있으면 도움이 될 것입니다.

+0

죄송합니다.이 질문은 완전히 잊어 버렸습니다. 결국 비슷한 점이 있었지만 더 이상 내 질문을 내 솔루션으로 업데이트하지 않아도됩니다. 고마워 – m4tt

관련 문제