下面列出了android.view.View#startDragAndDrop ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public boolean onLongClick(View v) {
TextView thisTextView = (TextView) v;
String dragContent = "Dragged Text: " + thisTextView.getText();
//Set the drag content and type.
ClipData.Item item = new ClipData.Item(dragContent);
ClipData dragData = new ClipData(dragContent,
new String[] {ClipDescription.MIMETYPE_TEXT_PLAIN}, item);
//Set the visual look of the dragged object.
//Can be extended and customized. Default is used here.
View.DragShadowBuilder dragShadow = new View.DragShadowBuilder(v);
// Starts the drag, note: global flag allows for cross-application drag.
v.startDragAndDrop(dragData, dragShadow, null, DRAG_FLAG_GLOBAL);
return false;
}
public static void startDrag(View view){
DraggableInfo tag = (DraggableInfo) view.getTag();
if (tag == null){
tag = new DraggableInfo("Text", 0, 0, 1);
}
Intent intent = new Intent();
intent.putExtra("data", tag);
ClipData dragData = ClipData.newIntent("value", intent);
View.DragShadowBuilder myShadow = new View.DragShadowBuilder(view);
// 震动反馈,不需要震动权限
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
view.startDragAndDrop(dragData, myShadow, null, 0);
}else{
view.startDrag(dragData, myShadow, null, 0);
}
}
private void startDragCategory(View view, String category) {
ClipData data = ClipData.newPlainText(category, category);
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
//view.startDrag(data, shadowBuilder, view, 0);
boolean dragstarted;
if (Build.VERSION.SDK_INT>=24) {
dragstarted = view.startDragAndDrop(data, shadowBuilder, view, 0);
} else {
dragstarted = view.startDrag(data, shadowBuilder, view, 0);
}
if (dragstarted) {
mDragDropSource = mCategoriesLayout;
if (!Categories.isSpeacialCategory(category)) {
showRemoveDropzone();
}
showHiddenCategories();
}
cancelHide();
}
@Override
public boolean onLongClick(View v) {
ClipData not_used_clip = ClipData.newPlainText("", "");
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
v.startDrag(not_used_clip, new View.DragShadowBuilder(v), v, 0);
}
else {
v.startDragAndDrop(not_used_clip, new View.DragShadowBuilder(v), v, 0);
}
mDragListener.startDrag(v);
return true;
}
@Override
public boolean onLongClick(View view) {
// Find the position of the preview relative to the touch location.
WidgetImageView img = mWidgetCell.getWidgetView();
// If the ImageView doesn't have a drawable yet, the widget preview hasn't been loaded and
// we abort the drag.
if (img.getBitmap() == null) {
return false;
}
Rect bounds = img.getBitmapBounds();
bounds.offset(img.getLeft() - (int) mLastTouchPos.x, img.getTop() - (int) mLastTouchPos.y);
// Start home and pass the draw request params
PinItemDragListener listener = new PinItemDragListener(mRequest, bounds,
img.getBitmap().getWidth(), img.getWidth());
Intent homeIntent = new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME)
.setPackage(getPackageName())
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(PinItemDragListener.EXTRA_PIN_ITEM_DRAG_LISTENER, listener);
if (!PreferencesState.isAllowRotationPrefEnabled(this) &&
(getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE && !isInMultiWindowMode())) {
// If we are starting the drag in landscape even though home is locked in portrait,
// restart the home activity to temporarily allow rotation.
homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
}
startActivity(homeIntent,
ActivityOptions.makeCustomAnimation(this, 0, android.R.anim.fade_out).toBundle());
// Start a system drag and drop. We use a transparent bitmap as preview for system drag
// as the preview is handled internally by launcher.
ClipDescription description = new ClipDescription("", new String[]{listener.getMimeType()});
ClipData data = new ClipData(description, new ClipData.Item(""));
view.startDragAndDrop(data, new DragShadowBuilder(view) {
@Override
public void onDrawShadow(Canvas canvas) { }
@Override
public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
outShadowSize.set(SHADOW_SIZE, SHADOW_SIZE);
outShadowTouchPoint.set(SHADOW_SIZE / 2, SHADOW_SIZE / 2);
}
}, null, View.DRAG_FLAG_GLOBAL);
return false;
}
/** See {@link View#startDragAndDrop(ClipData, DragShadowBuilder, Object, int)}. */
public static boolean startDragAndDrop(View view, ClipData data,
DragShadowBuilder shadowBuilder, Object myLocalState, int flags) {
return view.startDragAndDrop(data, shadowBuilder, myLocalState, flags);
}