안드로이드 멀티 터치 축소 이미지뷰 크기와 제스처 슬라이딩 이동뷰 위치에 대한 생각
이 효과는 두 가지 문제가 있다. ① 많이 건드려라.② 확대/축소 후 위치 배치 정보
첫 번째 문제는 비교적 잘 해결되는 것이다. 첫 번째 손가락이 화면에 닿으면down 이벤트가 발생하고 두 번째 손가락, 세 번째 손가락이...화면을 터치하면 Pointer를 터치합니다down 이벤트, 미끄러질 때 move 이벤트를 터치합니다. move 이벤트에서 이벤트를 통과할 수 있습니다.getx(int point index)는 제 index 개점의 자신에 대한 거리를 얻어 두 번의 거리의 크기를 비교하여 확대할지 축소할지 판단한다. 이 방면에 관한 자료가 인터넷에 많으니 더 이상 군더더기가 없다.
두 번째 문제는 이미지뷰의 축소와 비슷하다는 것을 먼저 생각했다. 자료를 찾아보면iamgeview의 축소에 대해 2가지가 있는데 첫 번째는 이미지뷰를 계승하고 행렬 변환을 통해 실현하는 것이 내 상황에 맞지 않는다고 느꼈다.두 번째는 뷰를 계승한 다음ondraw(canvas)에서 canvas를 통과한다.drawBitmap(bitmap Rect Rect Paint);를 참고하십시오.
http://www.cnblogs.com/_ymw/p/4156577.html이 문장을 참조하여 최종적으로 실현하다.
이 글에서 가장 중요한 것은 바로 zoomimageview라는 클래스이다. 이 클래스에서 많은 Obserable와 Observer 대상을 사용했는데 이것은 관찰자 모델을 사용한 것이다. 우리의 중점과 상관없이 (이런 프로그래밍 모델은 우리가 배울 만한 것이고 더욱 편리하게 코드를 재구성할 수 있으며 코드의 도약성이 강화된 것이 단점이다).
코드의 AspectQuotient (관람가???)이 종류의 의미는 이해하지 못하지만, 그래도 우리의 실현에 아무런 영향을 미치지 않는다. 왜냐하면 우리의 내용의 넓이는 아버지 컨트롤의 넓이와 같기 때문이다
Zoom State는 핵심 클래스입니다. 그 중에서 Zoom은 축소 비율입니다. mPanX, mPanY는 공간 중심 왼쪽의 내용이 전체 내용에서 차지하는 비율입니다. (이 뜻을 이해하기 위해 하루를 썼습니다. 말을 많이 하면 눈물이 납니다) 아니면 모르겠습니까?다음 그림을 보십시오.
mPanX의 의미는 x0/x1이다. (물론 상대점에 대한 선택은 자유롭다. 이 블로그는 컨트롤에 대한 중심이고 내가 실현하는 것은 컨트롤의 왼쪽 경계에 대한 것이다.)mPanY는 현재 가장 중요한 것이 mPanX의 계산 문제이다. 여기에 또 두 가지 상황이 있다. ①: 미끄러지는 상황에서: 우리가 컨트롤에서 dx의 거리를 미끄러질 때 내용이 확대된 상황에서도 dx가 미끄러지기 때문에 mPanX=mPanX±dx/(zoom*contentWidth)는 그 중에서 zoom은 확대축소된 배수이고 contentWidth는 내용의 원시 크기이다.(BasicZoom Listener, BasicZoom Control 클래스의pan(dx,dy) 방법 참조) ②: 축소는 mPanX의 크기 변화를 실현하고 우리의 축소 중심이 우리가 선택한 상대점일 때(이곳은 컨트롤의 중점) mPanx의 크기는 변하지 않는다는 것을 알 수 있다.그런데 우리가 줌 중심이 임의일 때는?우리의 축소 중심이 화면의 4분의 1일 때 축소하기 전에 4분의 1의 mPanX 값은 mPanx-(1/2-1/4)/zoom1이다. 앞에서 알 수 있듯이 축소 후 4분의 1의 mPanX 값도 mPanx-(1/2-1/4)/zoom1이다. 이때 중심의 mPanx 값은 mPanx-(1/2-1/4)/zoom1+(1/2-1/2-1/4)/zoom2(zoom1은 축소 전의 축소수이고 zoom2 값은 축소 후의 배수)이다.이렇게 해서 우리는 축소된 중심점의 mPanX 값을 냈다고 해도 절반까지 보급된 경우는 mPanX=mPanX-(0.5-x)(1/zoom1)-(1/zoom2)(BasicZoomControl류의 zoom(float,float,float) 방법 참조), 더 일반적인 경우는 mPanX=mPanX-(center-x)(1/zoom1)-(floa1/om2), 상대적인center를 중심으로 축소한 경우는 mPanx와 유사하다.현재 우리는 zoom과 mPanX, mPanY의 값을 알고 있다. 이제 우리는 축소된 그림의 일부분을 컨트롤에 표시할 수 있게 쉽게 계산할 수 있다.left=mPanX*zoom*contentWidth-contentWidth/2;right=left+contentWidth;
오늘 사용할 때 여러 개의 터치할 때의 버그가 발생했습니다. 여기에 보충해 주십시오.
위의 글에서 마지막 점을 얻은 x와 y의 위치 묘사는floatx=이벤트입니다.get(event.getpointerId(count-1));이런 견해는 잘못된 것이다.
보기:http://stackoverflow.com/questions/6919292/pointerindex-out-of-range-android-multitouch
Example:
Touch 1 Down.
Touch 1 State Index=0. ID=0Touch 1 State Index=0. ID=0Touch 2 State Index=1. ID=1Touch 2 State Index=0. ID=1
Touch 2 Down.
Touch 1 Release.
세 번째 상태의 순간.event.getpointerId(count-1)에서 얻은 수치 1이지만 이벤트.get(index)이 전하는 수치는 index입니다. 이때 두 번째 점 id는 1이고 index는 0입니다.event.get(1)java를 잘못 보고할 수 있습니다.lang.IllegalArgumentException: pointerIndex out of range.
해결 방법은 여기에count-1을 직접 전달하기;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.