Я использую функцию перетаскивания 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;
}
};
}
В чем может быть проблема? Спасибо