안드로이드 drag and drop 예제

Android에서 드래그 앤 드롭 프레임워크를 사용하면 그래픽 드래그 앤 드롭 제스처를 사용하여 한 보기에서 다른 보기로 데이터를 이동할 수 있습니다. 드래그 앤 드롭 작업이 종료되었음을 보기에 신호를 보시입니다. 시스템은 DragEvent 개체의 형태로 드래그 이벤트를 보냅니다. 개체에는 끌어서/놓기 프로세스에서 무슨 일이 일어나고 있는지 리스너에게 알려주는 작업 유형이 포함되어 있습니다. 개체에는 작업 유형에 따라 다른 데이터가 포함됩니다. 수신기는 드롭을 성공적으로 처리하는 경우 부울 true를 반환해야 합니다. 그렇지 않으면 false를 반환해야 합니다. 이제 표시된 TutorialsPoint 로고를 길게 클릭하면 로고 이미지가 그 자리에서 1 초 동안 클릭 한 후 조금 이동하는 것을 볼 수 있습니다. 화면 주위로 드래그하여 새 위치에 놓을 수 있습니다. 참고: 앱이 다중 창 모드에서 실행되는 경우 사용자는 한 앱에서 다른 앱으로 데이터를 끌어서 놓을 수 있습니다. 자세한 내용은 끌어서 놓기 지원 참조. 이 방법은 시스템이 끌어서 이벤트를 수신기에 디스패치할 때 호출하는 방법입니다. @Override 공개 부울 onDrag (보기 v, DragEvent 이벤트) { // 들어오는 이벤트 int 액션 = event.getAction (); // 예상 된 이벤트 스위치 (작업) {를 각각 처리하는 동작에 대한 동작 유형을 저장하는 변수를 정의합니다 .

레이아웃에서 항목을 드래그하면 응용 프로그램이 startDrag() 메서드를 호출하여 시스템에 드래그를 시작하도록 지시합니다. startDrag() 메서드 내부의 인수는 드래그할 데이터, 이 데이터에 대한 메타데이터 및 드래그 그림자 그리기에 대한 콜백을 제공합니다. 다음으로, 시스템은 현재 레이아웃의 모든 View 개체에 대한 끌기 이벤트 리스너에게 작업 유형 ACTION_DRAG_STARTED가 있는 드래그 이벤트를 보냅니다. 가능한 놓기 이벤트를 포함하여 드래그 이벤트를 계속 받으려면 끌기 이벤트 리스너가 true를 반환해야 합니다. 이렇게 하면 리스너가 시스템에 등록됩니다. 등록된 리스너만 드래그 이벤트를 계속 수신합니다. 이 시점에서 리스너는 View 개체의 모양을 변경하여 수신기가 drop 이벤트를 수락할 수 있음을 표시할 수도 있습니다. 끌기 점이 뷰의 경계 상자에 들어갔다는 것을 뷰에 신호를 보시입니다. 이 연습에서는 뷰 를 드래그할 수 있는 여러 뷰 그룹을 만듭니다. 이 예제에서는 항목을 한 보기에서 다른 보기로 이동할 수 있지만 다시 첫 번째 보기로 다시 이동할 수 없는 간단한 끌어놓기 기능을 보여 주었습니다. res/drawable/target_shape.xml을 열고 아래 코드를 붙여넣습니다.

target_shape.xml 파일은 각 뷰의 모양을 표시하며, 이 모양은 항목을 끌 때 표시됩니다. 드롭 영역으로 사용되는 OnDragListener가 있는 뷰는 setOnDragListener를 통해 할당된 OnDragListener를 가져옵니다. 이 단계는 사용자가 끌기 이벤트를 수신하도록 등록된 보기의 경계 상자 내에 드래그 그림자를 삭제하는 경우에만 발생합니다. 사용자가 다른 상황에서 드래그 섀도우를 해제하면 ACTION_DROP 드래그 이벤트가 전송되지 않습니다. 레이아웃에는 ImageView 내부를 드래그하는 데 사용할 두 개의 Button이 포함되어 있습니다. ImageView는 아래 그림과 같은 파일 circle_border.xml에 있는 그림을 표시합니다. 원래 뷰가 드래그되는 것처럼 보이는 드래그 앤 드롭을 구현해야 하는 경우 드래그가 시작되기 전과 작업이 완료된 후 뷰의 가시성을 전환해야 합니다. 드래그가 시작되면 시스템은 응용 프로그램에 콜백하여 드래그되는 데이터의 상태를 얻고 드래그 이벤트 수신기 또는 레이아웃의 각 View의 콜백 메서드로 드래그 이벤트를 보냅니다.

종료 – 액션 유형 ACTION_DROP 직후, 시스템은 드래그 작업이 끝났음을 나타내기 위해 동작 유형 ACTION_DRAG_ENDED와 드래그 이벤트를 보냅니다.