Android перетаскиваемый вид теней остается на экране (застрял) на некоторых устройствах - PullRequest
0 голосов
/ 21 апреля 2020

Я использую функцию перетаскивания Android в одном из моих приложений. Лишь немногие пользователи с указанными c устройствами сообщили, что перетаскиваемая тень остается постоянной на экране даже после того, как они отбрасывают вид на целевую (с помощью onDragListener)

, вот мой код:

public class MainActivity extends AppCompatActivity {

    RelativeLayout drop_here;
    RelativeLayout drag1;
    RelativeLayout drag2;

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        drop_here = findViewById(R.id.drop_here);
        drag1 = findViewById(R.id.drag1);
        drag2 = findViewById(R.id.drag2);

        drag1.setOnTouchListener(touchListener);
        drag2.setOnTouchListener(touchListener);

        drop_here.setOnDragListener(dropListener);



    }

    OnTouchListener touchListener = new View.OnTouchListener() {
        @SuppressLint("ClickableViewAccessibility")
        public boolean onTouch(final View view, MotionEvent motionEvent) {
            view.getParent().requestDisallowInterceptTouchEvent(true);
            switch(motionEvent.getAction()){
                case MotionEvent.ACTION_DOWN:

                case MotionEvent.ACTION_MOVE:
                    try {
                        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
                        ClipData data = ClipData.newPlainText("label", "text");
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            view.startDragAndDrop(data, shadowBuilder, null, View.DRAG_FLAG_GLOBAL);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    break;
            }
            return true;
        }
    };



    View.OnDragListener dropListener = new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            if (event.getAction() == DragEvent.ACTION_DROP) {

            } else if(event.getAction() == DragEvent.ACTION_DRAG_ENTERED) {

            }
            return true;
        }
    };

}

В чем может быть проблема? Спасибо

...