[Android] 드래그 앤 드롭 설치

9155 단어 AndroidJava

개요


응용 프로그램을 만드는 동안 뷰를 끌어다 놓으려는 경우가 있다고 생각합니다.
이번에는 View 드래그 앤 드롭을 구현하는 방법에 대해 설명합니다.

개발 환경

  • AndroidStudio:1.5.1
  • JDK:1.7.0
  • Android:5.0.2 (Lollipop)
  • 절차.


    1. layout 파일에서 View 구성


    우선,layout 파일에 View를 설정합니다.
    뷰 레벨을 물려받으면 뭐든지 돼요.
    이번에는 TextView를 사용하여 설명합니다.
    activity_main.xml
    <!-- ドラッグ&ドロップするView -->
    <TextView
        android:id="@+id/dragged_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="50sp"/>
    

    2. 길게 누르는 설치


    위의 TextView를 길게 누르면 드래그 앤 드롭할 수 있습니다.
    다음은 코드상의 처리다.
    1. 먼저 MainActivity에 On LongClickListener를 설치합니다.
    MainActivity.java
    public class MainActivity extends AppCompatActivity implements View.OnLongClickListener {
    
    ...
    
        /* OnLongClickListenerを実装したViewが長押しされた際に呼び出されるメソッド */
        @Override
        public boolean onLongClick(View v) {
        /* ここに長押しした際の処理を記述します */
            return true;
        }
    
    2. layout 파일에서 드래그할 TextView를 가져옵니다.
    MainActivity.java
    public class MainActivity extends AppCompatActivity implements View.OnLongClickListener {
        /* 先ほどのTextViewをメンバ変数で保持 */
        private View mDraggedView;
    
        /* 画面起動前のViewの初期化処理などを行うメソッド */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            /* layoutファイルからTextViewを取得 */
            mDraggedView = findViewById(R.id.dragged_view);
            /* OnLongClickListenerをTextViewにセット */
            mDraggedView.setOnLongClickListener(this);
        }
    
    3. 전체 코드는 다음과 같다.
    MainActivity.java
    /* View.OnLongClickListenerの実装 */
    public class MainActivity extends AppCompatActivity implements View.OnLongClickListener {
        /* 先ほどのTextViewをメンバ変数で保持 */
        private View mDraggedView;
    
        /* 画面起動前のViewの初期化処理などを行うメソッド */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            /* layoutファイルからTextViewを取得 */
            mDraggedView = findViewById(R.id.dragged_view);
            /* OnLongClickListenerをTextViewにセット */
            mDraggedView.setOnLongClickListener(this);
        }
    
        /* OnLongClickListenerを実装したViewが長押しされた際に呼び出されるメソッド */
        @Override
        public boolean onLongClick(View v) {
        /* ここに長押しした際の処理を記述します */
            return true;
        }
    }
    

    3. 드래그 앤 드롭 시작

    startDrag() 방법을 사용하여 검색한 TextView를 끌어 놓습니다.
    방금 기술한 onLongClick() 내에서 집행startDrag() 방법.
    코드는 다음과 같습니다.
    MainActivity.java
    /* OnLongClickListenerを実装したViewが長押しされた際に呼び出されるメソッド */
    @Override
    public boolean onLongClick(View v) {
    /* ここに長押しした際の処理を記述します */
    
        /* ドラッグ&ドロップ処理を開始する */
        v.startDrag(null, new View.DragShadowBuilder(v), v, 0);
    
        return true;
    }
    
    그러면 View를 잠시 끌 수 있습니다.

    startDrag () 방법에서 전달된 4개의 매개 변수 정보


    1.ClipData data
    ClipData 전송 방법
    드래그 앤 드롭 중에 ClipData에 저장된 데이터를 추출할 수 있습니다.
    ClipData는 문자열과 Intent 등을 유지할 수 있습니다.
    이번에는 데이터를 제출할 필요가 없어서,null을 지정했습니다.
    2.DragShadowBuilder shadowBuilder
    DragShadow Builder, 말 그대로 드래그할 때 그림자가 생기는 클래스입니다.
    이번 예를 들어 Hello, World라고 적힌 TextView의 얇은 분신이 긴 시간에 생성될 것이다
    이것은 드래그를 통해 분신을 이동하는 인상을 줄 것이다.
    이 분신을 생성한 것이 바로 DragShadow Builder다.
    이번에는 특별히 상세한 지정은 없지만 음영의 크기와 드래그할 때 손가락의 위치 관계 등을 사용자 정의할 수 있다.
    3.Object myLocalState
    메소드의 세 번째 매개변수로 View를 전달한 후 드래그 앤 드롭 처리 알림을 받는 메소드에서 View를 Local State(드래그 앤 드롭 View)로 자신하고 Object를 통해 받을 수 있습니다.
    드래그된 View에 대해 수행할 수 있는 작업은 무엇입니까?
    4.int flags
    이건 잘 모르겠다(웃음)
    View급 소스를 보면 0을 줘도 문제없다.

    끝말


    이번에는 View의 드래그 앤 드롭 설치 방법에 대해 설명했습니다.
    다음에는 드래그 후 처리와 처리를 설명하고 싶습니다.
    만약 이해하기 어려운 부분이나 보도, 코드에 대한 지적이 있다면
    편하게 말씀해 주셨으면 좋겠습니다.
    마지막으로 이 기사를 읽어 주셔서 감사합니다.
    이상

    좋은 웹페이지 즐겨찾기