2011-12-05 5 views
1

API 레벨 8로 안드로이드보기를 회전하고 싶습니다. 예를 들어, 사용자가 왼쪽 정렬 된 EditText에 텍스트를 입력 할 때 EditText를 90도 회전하여 첫 번째 문자가 하단 (90도 회전) 및 이후 문자는 위쪽으로 입력됩니다.Android보기 회전

처음으로 기간이 0 인 애니메이션을 사용해 보았지만 여전히 rotate 필드가 표시됩니다. 불행히도, 이것은 비 스타터입니다. 애니메이션을 완전히 숨길 수있는 방법을 찾으면이 방법이 가장 단순 해 보입니다.

그럼 정사각형의 뷰는 좋지만 onTraw는 캔버스를 회전시켜 보았습니다. 스퀘어 뷰가 아닌 사각형의 경우 캔버스를 회전 시키려고했는데 EditText의 크기를 제어하지 않았습니다. 저는 캔버스를 자르고 번역 할 때 다양한 시도를 시도했지만, 텍스트 입력 시작시 커서가 보이도록 할 수는 있지만, 누군가가 더 많은 내용을 입력하기 시작하면 이상한 일들을 할 것입니다 (일반적으로 내용이 보이지 않게 사라짐) .

또한 onMeasure에서 View 사각형을 만든 다음 onDraw에서 캔버스를 회전 한 다음 View 차원을 이후의 onMeasure에 다시 배치했습니다. 처음 두 단계는 훌륭하게 작동했습니다. 그러나 세 번째 단계는 위에서 설명한 것과 비슷한 결과를 나타 냈습니다. 사용자가 필드 텍스트가 이상한 일을하는 지점에서 텍스트를 입력하기 시작할 때까지 상황이 정상적으로 보였습니다 (일반적으로 사라짐).

애니메이션이없고 비표준 Android보기 (예 : EditText)를 API 레벨 8 이하로 성공적으로 돌릴 수 있었던 사람이 있습니까?

답변

0

API 레벨 8에서 정확하게 뷰를 회전 시키려면 시간을 들였지만 제대로 작동시키는 것은 불가능하다고 생각합니다. 참고로, 안드로이드 3.2에서 올바르게 작동하지 않습니다.보기 클래스에 setRotation(int angle) 메서드가 있습니다. 예를 들어 VideoView의 경우이 기능이 제대로 작동하지 않습니다.

P.S 당시 나는 비디오 작품 이외의 다른 것을 위해 로테이션을 만들었던 것처럼 보였습니다. onTouchEvent 메서드를 재정의 했습니까? 보지 않은 경우 캔버스를 회전하면 뷰를 회전시키지 않고 터치 이벤트를 수신하지 않지만 이전 영역에서는 터치 이벤트를 계속 수신합니다. 적절한 위치로 오프셋하기 위해 터치 이벤트 좌표에 회전 행렬을 수동으로 적용해야합니다.