안드로이드 드래그 예제

주: 끌어서 놓기 프로세스 중에 드래그되는 뷰는 원래 뷰의 그림자입니다. 원래 뷰는 그대로 유지되며 변경되지 않습니다. 대신, 그것의 인스턴스는 DragShadow 클래스를 사용 하 여 만들어집니다. 따라서 위에서 언급한 드래그 뷰는 실제로 드래그 섀도우입니다. 끌어서 놓기 이벤트는 사용자가 데이터 끌기를 시작할 때 발생하므로 응용 프로그램은 startDrag() 메서드를 호출하여 드래그를 시작하도록 시스템에 지시합니다. 그런 다음 시스템은 드래그 섀도우를 가져가기 위해 응용 프로그램을 다시 호출하고 DragEvent를 보냅니다. 레이아웃의 모든 View 개체가 전송 끌기 이벤트에 응답하도록 하려면 각 개체에 대해 리스너(onDragListener 또는 onTouchListener)를 등록하거나 콜백 메서드(onDragEvent 또는 onTouchEvent)를 설정하고 다른 뷰를 가능한 한 정의해야 합니다. “ 목표물을 떨어뜨리라“고 말했다. View에 대해 수신기 및 콜백 메서드를 모두 사용하는 경우 리스너가 드래그 이벤트를 성공적으로 처리하는 한 시스템은 리스너를 먼저 호출한 다음 콜백을 호출합니다. 에 의해 게시 됨: 드래그 앤 드롭 12 월 11 일, 2013 1 댓글 보기 다음 예는 View.setOnLongClickIner (), View.setOnTouchListener ()와 View.OnDragEventListener ()를 사용하여 간단한 드래그 앤 드롭의 기능을 보여줍니다. DragEvent는 드래그 앤 드롭 작업 중에 여러 번 시스템에서 전송되는 이벤트를 나타냅니다.

이 클래스는 드래그/드롭 프로세스 중에 사용하는 상수와 중요한 메서드를 거의 제공하지 않습니다. 이 생성기를 사용하는 경우 View.DragShadowBuilder를 확장하거나 메서드를 재정의할 필요가 없습니다. 기본적으로 사용자가 화면을 터치하는 위치 아래를 중심으로 인수로 전달하는 뷰와 모양이 같은 드래그 그림자가 표시됩니다. 또한 startDrag 메서드에 드래그 섀도우 빌더의 인스턴스를 전달합니다. 이 개체는 끌기 작업에 사용되는 그림을 지정합니다. 예를 들어 끌기 작업 중에 뷰의 이미지를 표시하는 뷰를 직접 전달할 수 있습니다. @Override 공용 부울 onLongClick(보기 v) { // 보기 개체의 태그 ClipData.Item 항목 = 새 ClipData.Item((CharSequence) v.getTag()에서 새 ClipData.항목을 만듭니다. 이미 생성된 항목입니다. 이렇게 하면 // ClipData 내에서 새 ClipDescription 개체가 생성되고 MIME 형식 항목을 „텍스트/일반“ 문자열[] mimeType = {ClipDescription.MIMETYPE_TEXT_PLAIN}로 설정합니다. ClipData 데이터 = 새 클립데이터(v.getTag().toString(), 마임유형, 항목); 드래그 섀도우 빌더를 인스턴스화합니다.

View.DragShadowBuilder 드래그섀도우 = 새 보기.DragShadowBuilder(v); 드래그 v.startDrag (데이터 // 데이터를 드래그 할 , dragshadow // 드래그 그림자, v // 드래그 앤 드랍 작업에 대한 로컬 데이터 , 0 // 플래그는 현재 사용하지 않기 때문에 0으로 설정됨); true를 반환합니다. } 이미지를 드래그 섀도우라고 합니다. View.DragShadowBuilder 오브젝트에 대해 선언하는 메서드를 사용하여 만든 다음 startDrag()를 사용하여 드래그를 시작할 때 시스템에 전달합니다. startDrag()에 대한 응답의 일부로 시스템은 View.DragShadowBuilder에서 정의한 콜백 메서드를 호출하여 드래그 섀도우를 얻습니다. 작업 유형을 얻으려면 수신기호출 getAction(). DragEvent 클래스의 상수로 정의된 6개의 가능한 값이 있습니다. 표 1에 나와 있습니다. 이 보기가 드래그된 데이터를 허용할 수 있는지 확인합니다(event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { // 뷰에 파란색 색조를 적용하여 데이터 v.getBackground().setColorFilter()를 허용할 수 있음을 나타냅니다. Color.BLUE, 포터더프.모드.SRC_IN); 뷰를 무효화하여 새 틴트 v.invalidate()에서 다시 그리기를 강제로 합니다. 을 클릭하여 View가 드래그된 데이터를 수락할 수 있음을 나타냅니다.

Dieser Eintrag wurde veröffentlicht in Allgemein. Lesezeichen auf den Permanentlink.