2013-08-03 4 views
8

캔버스를 화면 중앙으로 회전시켜 오른쪽 하단에 (0,0) 좌표를 얻으려고합니다.안드로이드 : 화면 중앙에 캔버스 회전

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
canvas.rotate(180, width/2, height/2); 

제대로 회전 않고, 모든 API 레벨 17으로하지만, API 레벨 8 (0,0)와 AVD에 AVD에 완벽한 좌표 :

내가 그것을 어떻게 잘못된 장소에 나타납니다. 회전하기 전에 사진이 너무이 장치에서 전체 화면을 피팅했지만, 지금은 다음과 같습니다

enter image description here

어떤 문제를 일으키는?

* EDIT!

문제는 자신의 중간 점을 중심으로 캔버스를 회전에 의해 해결 :

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2); 

하지만 여전히를 왜하지 않습니다 오래된 API를 사용하여 이전 버전을 사용할 수 있습니까?

답변

0

CanvasDisplay의 크기가 같지 않아도됩니다. Display.getWidth()은 더 이상 사용되지 않으며 대신 Display.getSize()을 사용하는 것이 좋습니다. documentation에서 :

디스플레이의 크기를 픽셀 단위로 가져옵니다. 장치는 일반적으로 (예를 들면, 상태 바)를 화면 장식을 가지기 때문에이 값은 컴퓨팅 배치에 사용되지 않도록

참고 문의 애플리케이션 공간의 양을 줄여 디스플레이의 가장자리를 따라 크기가 여기에 반환되었습니다. 레이아웃은 대신 창 크기를 사용해야합니다. 캔버스는 정확한 값을 제공하기 때문

그래서, canvas 행렬 변환의 경우, 항상, 오히려 디스플레이 또는 Window와 참조로 canvas를 사용합니다. 캔버스를 가운데로 회전하려면 canvas의 가운데가 필요합니다.

캔버스의 중심은 (canvas.getWidth()/2 , canvas.getHeight()/2)

입니다.