下面列出了android.view.View#DragShadowBuilder ( ) 实例代码,或者点击链接到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 boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN &&
motionEvent.getPointerId(0) == 0) {
// the getPointerId is to avoid executing something if someone decides to drag with
// 2 fingers
final ClipData data = ClipData.newPlainText("word", (String) view.getTag());
final View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.GONE);
return true;
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
// it is a tap, if the touch was quick enough to cancel the execution
// of ACTION_DOWN, we should consider as a tap too.
final FlowLayout parent = (FlowLayout) view.getParent();
if (parent.getId() == R.id.words_container) {
moveView(wordsContainer, poemContainer, view);
} else {
moveView(poemContainer, wordsContainer, view);
}
return true;
} else {
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 onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
TowerView towerView = (TowerView) v;
if (mScoreBoard.getCredits() >= towerView.getTowerValue()) {
mTowerInserter.insertTower(towerView.getTowerName());
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder() {
@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
shadowSize.set(1, 1); // must be positive
}
@Override
public void onDrawShadow(Canvas canvas) {
}
};
ClipData data = ClipData.newPlainText("", "");
towerView.startDrag(data, shadowBuilder, towerView, 0);
}
}
return false;
}
@Override
public boolean onLongClick (View view)
{
try
{
App app = (App) view.getTag ();
AppManager appManager = app.getAppManager ();
int index = appManager.indexOfPinned (app);
ClipData.Item item = new ClipData.Item (Integer.toString (index));
ClipData data = new ClipData (Integer.toString (index), new String[]{"text/plain"}, item);
View.DragShadowBuilder dragShadowBuilder = new View.DragShadowBuilder (view);
view.startDrag (data, dragShadowBuilder, item, 0);
appManager.startedDraggingPinnedApp ();
}
catch (Exception ex)
{
ExceptionHandler exh = new ExceptionHandler (ex);
exh.show (this.parent);
}
return true;
}
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN &&
motionEvent.getPointerId(0) == 0) {
// the getPointerId is to avoid executing something if someone decides to drag with
// 2 fingers
final ClipData data = ClipData.newPlainText("word", (String) view.getTag());
final View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.GONE);
return true;
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
// it is a tap, if the touch was quick enough to cancel the execution
// of ACTION_DOWN, we should consider as a tap too.
final FlowLayout parent = (FlowLayout) view.getParent();
if (parent.getId() == R.id.words_container) {
moveView(wordsContainer, poemContainer, view);
} else {
moveView(poemContainer, wordsContainer, view);
}
return true;
} else {
return false;
}
}
private void startDrag() {
if (mDragPotential==null) return;
AppLauncher dragitem = (AppLauncher) mDragPotential.getTag();
String label = dragitem.getLabel();
ClipData data = ClipData.newPlainText(label, label);
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mDragPotential);
boolean dragstarted;
if (Build.VERSION.SDK_INT>=24) {
dragstarted = mDragPotential.startDragAndDrop(data, shadowBuilder, mDragPotential, 0);
} else {
dragstarted = mDragPotential.startDrag(data, shadowBuilder, mDragPotential, 0);
}
if (dragstarted) {
mBeingDragged = dragitem;
mDragDropSource = (ViewGroup) mDragPotential.getParent();
Log.d(TAG, "Drag started: " + dragitem.getActivityName() + ", source = " + mDragDropSource);
showCats(true);
showHiddenCategories();
// Log.d(TAG, "source = " + mDragDropSource);
//if (mDragDropSource.getId()!=R.id.icontarget) {
showRemoveDropzone();
//}
}
mDragPotential = null;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(iconArrangeMode && motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
startDragIndex = desktopIcons.indexOfChild((ViewGroup) view.getParent());
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else
return false;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (!problemDone && motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText(view.getTag().toString(), view.getTag().toString());
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
//view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public final void startDrag(View.DragShadowBuilder dragShadowBuilder) {
Point shadowSize = new Point();
Point shadowTouchPoint = new Point();
dragShadowBuilder.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
itemView.startDrag(null, dragShadowBuilder,
new DragInfo(getItemId(), shadowSize, shadowTouchPoint, adapter.getLastTouchPoint()), 0);
adapter.notifyItemChanged(getAdapterPosition());
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// start move on a touch event
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
return false;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// start move on a touch event
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
return false;
}
public View.DragShadowBuilder getShadowBuilder(View itemView, Point touchPoint) {
return new DragSortShadowBuilder(itemView, touchPoint);
}
@Override public View.DragShadowBuilder getShadowBuilder(View itemView, Point touchPoint) {
return new NoForegroundShadowBuilder(itemView, touchPoint);
}
@Override
public View.DragShadowBuilder getShadowBuilder(final View itemView,
final Point touchPoint) {
return new DragSortShadowBuilder(itemView, touchPoint);
}