Android 是否有一种方法可以在触摸点不进入视图的情况下处理拖放操作';边界?
我正在android上开发一个拖放应用程序,其中一个视图可以拖放到另一个视图上。我正在使用Android 是否有一种方法可以在触摸点不进入视图的情况下处理拖放操作';边界?,android,drag-and-drop,Android,Drag And Drop,我正在android上开发一个拖放应用程序,其中一个视图可以拖放到另一个视图上。我正在使用 View.OnDragListener和重写onDrag方法以侦听拖动事件 只有当我的手指点(接触点)进入可以处理跌落的视图范围时,我的跌落才会得到处理。我希望在拖动的视图进入时处理跌落,而不仅仅是在触摸点进入时。 更简单地说,我希望在拖放阴影与视图边界重叠时处理拖放 在安卓系统中有没有办法做到这一点 下面是被覆盖的onDrag查看方法。OnDragListener @Override publi
View.OnDragListener
和重写onDrag
方法以侦听拖动事件
只有当我的手指点(接触点)进入可以处理跌落的视图范围时,我的跌落才会得到处理。我希望在拖动的视图进入时处理跌落,而不仅仅是在触摸点进入时。
更简单地说,我希望在拖放阴影与视图边界重叠时处理拖放
在安卓系统中有没有办法做到这一点
下面是被覆盖的onDrag
查看方法。OnDragListener
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
LinearLayout dragAndDropLayout = findViewById(R.id.layout_drag_n_drop);
ImageView actionBox = (ImageView) view;
int dragAction = dragEvent.getAction();
CardView parentCardView = (CardView) actionBox.getParent();
if (dragAction == DragEvent.ACTION_DRAG_STARTED) {
mMenuAdapter.removeMenu(draggedMenuText);
parentCardView.setCardBackgroundColor(Color.parseColor("#FF4081"));
dragAndDropLayout.setBackgroundColor(Color.LTGRAY);
performEnterAnimation(actionBox.getParent());
} else if (dragAction == DragEvent.ACTION_DRAG_ENDED) {
if (dropEventNotHandled(dragEvent)) {
mMenuAdapter.addMenuAt(draggedMenuText, 0);
}
parentCardView.setCardBackgroundColor(Color.parseColor("#3F51B5"));
dragAndDropLayout.setBackgroundColor(Color.TRANSPARENT);
((CardView) parentCardView.getParent()).setCardBackgroundColor(Color.TRANSPARENT);
updateActionBoxesAsPerPreferences();
} else if (dragAction == DragEvent.ACTION_DRAG_ENTERED) {
containsDraggable = true;
parentCardView.setCardBackgroundColor(Color.parseColor("#FF4081"));
((CardView) parentCardView.getParent()).setCardBackgroundColor(Color.LTGRAY);
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE));
}
} else if (dragAction == DragEvent.ACTION_DRAG_EXITED) {
containsDraggable = false;
parentCardView.setCardBackgroundColor(Color.parseColor("#FF4081"));
dragAndDropLayout.setBackgroundColor(Color.LTGRAY);
((CardView) parentCardView.getParent()).setCardBackgroundColor(Color.TRANSPARENT);
} else if (dragAction == DragEvent.ACTION_DROP) {
if (containsDraggable) {
int oldIconResource = getIconResourceOfView(view);
String oldIconName = MenuAsset.getNameOf(oldIconResource);
CharSequence text = dragEvent.getClipData().getItemAt(0).getText();
if (text.equals("list_item")) {
updateSharedPreferences(view, draggedMenuText);
mMenuAdapter.removeMenu(draggedMenuText);
mMenuAdapter.addMenuAt(oldIconName, 0);
} else {
updateSharedPreferences(view, draggedMenuText);
if (text.equals("action_box_1")) {
updateSharedPreferences(mActionBox1, oldIconName);
performDropAnimation(mActionBox1);
} else if (text.equals("action_box_2")) {
updateSharedPreferences(mActionBox2, oldIconName);
performDropAnimation(mActionBox2);
} else if (text.equals("action_box_3")) {
updateSharedPreferences(mActionBox3, oldIconName);
performDropAnimation(mActionBox3);
}
}
updateActionBoxesAsPerPreferences();
performDropAnimation(actionBox);
}
}
return true;
}
private boolean dropEventNotHandled(DragEvent dragEvent) {
return !dragEvent.getResult();
}
请显示代码的相关部分。@Binarus我已经编辑了这篇文章。请看一看。