안드로이드

안드로이드 드래그 앤 드랍 Drag and Drop setOnDragListener

알통몬_ 2018. 12. 7. 09:43
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드의 드래그 앤 드랍에 대해 포스팅합니다.


View.OnDragListener 와 View.OnTouchListener 가 사용됩니다.


예제)

SampleActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package superbrain.rowan.com.fingerdraganddrawexample;
 
import android.content.ClipData;
import android.content.ClipDescription;
import android.databinding.DataBindingUtil;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
 
import superbrain.rowan.com.fingerdraganddrawexample.databinding.ActivitySampleBinding;
 
public class SampleActivity extends AppCompatActivity {
 
    ActivitySampleBinding binding;
    float fromX, fromY;
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_sample);
        binding.moveTxtView.setTag("good");
        binding.motherView.setOnDragListener(drag);
 
        binding.moveTxtView.setOnTouchListener((view, evt) -> {
            int action = evt.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    if (view != null) {
                        String tag = view.getTag().toString();
                        ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
                        String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
                        ClipData data = new ClipData(tag, mimeTypes, item);
                        fromX = evt.getX();
                        fromY = evt.getY();
                        View.DragShadowBuilder builder = new View.DragShadowBuilder(view);
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            view.startDragAndDrop(data, builder, null0);
                        } else {
                            view.startDrag(data, builder, null0);
                        }
                    }
                    break;
            }
            return view.performClick();
        });
    }
 
 
    View.OnDragListener drag = (view, evt) -> {
        int id = view.getId();
        int action = evt.getAction();
        switch (action) {
            case DragEvent.ACTION_DROP:
                if (id == R.id.motherView) {
                    float x = evt.getX() - (binding.moveTxtView.getWidth() / 2);
                    float y = evt.getY() - (binding.moveTxtView.getHeight() / 2);
                    binding.moveTxtView.setX(x);
                    binding.moveTxtView.setY(y);
                }
                break;
        }
        return true;
    };
}
 
cs

activity_sample.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
 
    <android.support.constraint.ConstraintLayout
        android:id="@+id/motherView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".SampleActivity">
        <TextView
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:id="@+id/moveTxtView"
            android:textColor="@android:color/white"
            android:background="@android:color/black"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28sp"
            android:padding="8dp"
            android:text="move"/>
    </android.support.constraint.ConstraintLayout>
</layout>
cs


위 코드를 복붙하시고 실행하시면 바로 드래그 앤 드랍 이벤트를 테스트해 보실 수

있습니다.


드래그 앤 드랍을 이해하고 사용할 줄 안다면 안드로이드의 많은 부분들을

해결할 수 있겠죠?

가령 간단한 게임 중 숫자 여러개가 나오고 순서대로 옮기는 게임이라던가 ㅎㅎ


어렵지 않으니 사용법을 익혀두시면 좋을 듯합니다.

이상입니다.

감사합니다.

반응형