2011-10-23 3 views
0

각 선이 이전 선과 연결되어있는 직선을 (onTouch 핸들러로) 생성하도록하고 싶습니다. 사용자가 연결된 직선을 그릴 때 사용자에게 각 선에 이름을 추가 할 수있는 권한을 부여하려고합니다.두 좌표 사이의 실선에 이벤트 리스너를 추가하는 방법

서로 직선을 연결하는 첫 번째 부분은 아마도 가장 어려운 부분이 아닙니다. onTouch와 View/Paint 객체를 사용하면이 작업을 수정할 수 있습니다. 그러나 어려운 부분은 특정 직선에 텍스트를 추가하는 방법입니까? 어쩌면 eventListener는 사용자가 라인 (onTouchListener)을 눌렀다가 나중에 텍스트를 추가하는 함수가 생겼음을 나타낼 수 있습니까? 그러나 필자가 아는 한, onTouchListener를 칠한 선에 추가 할 수는 없습니다. 따라서 올바른 방향은 무엇입니까? 어쩌면 각각의 작성된 선을 별도의 View 객체에 배치 할 수 있습니까?

답변

0

솔루션 A (사용자마다 한 번의 클릭에 대한 한 줄 그리는 경우) :

은 캔버스를 통해/외부 버튼을 만들고 사용자가 그가/그녀가 도면으로 수행하고 시작하고자 할 때 누를 수 있음을 라벨링. 이 방법으로 캔버스는 두 가지 상태가 가능합니다 : 그리기/레이블 지정. onTouch 메소드는 이것을 선 (선생님이 지금하는 일)으로 그리거나, 가장 가까운 선을 찾고 그것을 라벨링하는 것으로 간주합니다. 레이블을 지정할 대상 행을 찾으려면 사용자가 그렸던 모든 행을 포함하는 데이터 구조를 유지해야합니다. LinkedList는 단순한 (더 좋지는 않지만) 접근 방식 일 수 있습니다. 사용자가 화면을 클릭하고 현재 캔버스 상태가 '라벨 지정'인 경우 목록을 반복하고 onTouch 이벤트 지점 (getRawX, getRawY)과 Distance between a point and a [email protected] 사이의 거리를 각 선에 대해 계산합니다. 마지막으로 가장 가까운 줄에 레이블을 지정합니다 (대화 상자를 표시하거나 이와 비슷한 내용을 표시).

솔루션 B (사용자가 드래그 제스처로 선을 그은 경우) 단추 또는 캔버스 상태가 필요하지 않습니다. 한 번의 클릭 만 감지하면됩니다 (아래쪽 및 위쪽 터치 이벤트는 동일한 좌표에서 발생 함). 솔루션 A의 데이터 구조/알고리즘은 계속 적용됩니다.

+0

이러한 솔루션을 이용해 주셔서 감사합니다. 어쩌면 내가 제안한 상태 버튼을 건너 뛸 수도 있습니다. 특정 최대 거리를 입력하면됩니다. onTouch 이벤트 포인트에서 라인까지의 거리가 최대 값보다 작 으면 사용자가 직접 레이블을 추가 할 수 있습니다. 또한 한 줄과 다른 줄 사이의 모든 연결 지점을 포함하는 목록을 유지해야합니다.이 연결 지점에서만 새 줄을 그릴 수 있기를 원하기 때문입니다. – martijnplaat

관련 문제