下面列出了android.view.DragEvent#ACTION_DRAG_LOCATION 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Same as {@link #recordMotionEvent}. It creates a temporary {@link MotionEvent} object
* using {@param event} for tracking velocity.
*/
void recordDragEvent(long dragStartTime, DragEvent event) {
final int motionAction;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
motionAction = MotionEvent.ACTION_DOWN;
break;
case DragEvent.ACTION_DRAG_LOCATION:
motionAction = MotionEvent.ACTION_MOVE;
break;
case DragEvent.ACTION_DRAG_ENDED:
motionAction = MotionEvent.ACTION_UP;
break;
default:
return;
}
MotionEvent emulatedEvent = MotionEvent.obtain(dragStartTime, SystemClock.uptimeMillis(),
motionAction, event.getX(), event.getY(), 0);
recordMotionEvent(emulatedEvent);
emulatedEvent.recycle();
}
@Override
public boolean onDragEvent(DragEvent event) {
PasswordStateObject state = (PasswordStateObject) event.getLocalState();
if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
if (!state.toString().contains((String) getTag())) {
state.append((String) getTag());
((PasswordListener) getParent()).onPasswordButtonTouched(this);
setBackgroundResource(R.drawable.loginbuttonpressed);
}
}
if (event.getAction() == DragEvent.ACTION_DRAG_ENDED)
if (state != null) {
state.passwordComplete();
}
return true;
}
@Override
public boolean onDragEvent(DragEvent event) {
if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
Point p = new Point((int) event.getX(), (int) event.getY());
if (!roaming) {
roaming = true;
points.add(p);
} else {
try {
points.set(points.size() - 1, p);
} catch (Exception e) {
Reset();
FileLog.e("Yahala", e);
}
}
invalidate();
}
return true;
}
@Override
public boolean onDrag(View view, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
intercept = false;
startTime = SystemClock.uptimeMillis();
dispatchTouchEvent(view, MotionEvent.ACTION_DOWN, event.getX(), event.getY());
// Return true to receive further events.
return true;
case DragEvent.ACTION_DRAG_LOCATION:
dispatchTouchEvent(view, MotionEvent.ACTION_MOVE, event.getX(), event.getY());
return false;
case DragEvent.ACTION_DRAG_ENDED:
dispatchTouchEvent(view, MotionEvent.ACTION_UP, event.getX(), event.getY());
return false;
default:
return false;
}
}
@Override
public boolean onDrag(View view, DragEvent event) {
// Change the color of the target for all events.
// For the drop action, set the view to the dropped image.
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DRAG_ENTERED:
setTargetColor(view, COLOR_HOVER);
return true;
case DragEvent.ACTION_DRAG_LOCATION:
processLocation(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DRAG_EXITED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DROP:
return processDrop(view, event);
case DragEvent.ACTION_DRAG_ENDED:
setTargetColor(view, COLOR_INACTIVE);
return true;
default:
break;
}
return false;
}
@Override
public boolean onDrag(View view, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DRAG_ENTERED:
setTargetColor(view, COLOR_HOVER);
return true;
case DragEvent.ACTION_DRAG_LOCATION:
processLocation(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DRAG_EXITED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DROP:
return processDrop(view, event);
case DragEvent.ACTION_DRAG_ENDED:
setTargetColor(view, COLOR_INACTIVE);
return true;
default:
break;
}
return false;
}
@Override
public boolean onDragEvent (DragEvent event) {
final int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
mLastX = event.getX();
mLastY = event.getY();
return true;
case DragEvent.ACTION_DRAG_ENTERED:
return true;
case DragEvent.ACTION_DRAG_LOCATION:
mLastX = event.getX();
mLastY = event.getY();
mEventListener.onDriverDragMove(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DROP:
mLastX = event.getX();
mLastY = event.getY();
mEventListener.onDriverDragMove(event.getX(), event.getY());
mEventListener.onDriverDragEnd(mLastX, mLastY);
return true;
case DragEvent.ACTION_DRAG_EXITED:
mEventListener.onDriverDragExitWindow();
return true;
case DragEvent.ACTION_DRAG_ENDED:
mEventListener.onDriverDragCancel();
return true;
default:
return false;
}
}
@Override
public boolean onDrag(View view, DragEvent event) {
// Change the color of the target for all events.
// For the drop action, set the view to the dropped image.
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DRAG_ENTERED:
setTargetColor(view, COLOR_HOVER);
return true;
case DragEvent.ACTION_DRAG_LOCATION:
processLocation(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DRAG_EXITED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DROP:
return processDrop(view, event);
case DragEvent.ACTION_DRAG_ENDED:
setTargetColor(view, COLOR_INACTIVE);
return true;
default:
break;
}
return false;
}
@Override
public boolean onDrag(View view, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DRAG_ENTERED:
setTargetColor(view, COLOR_HOVER);
return true;
case DragEvent.ACTION_DRAG_LOCATION:
processLocation(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DRAG_EXITED:
setTargetColor(view, COLOR_ACTIVE);
return true;
case DragEvent.ACTION_DROP:
return processDrop(view, event);
case DragEvent.ACTION_DRAG_ENDED:
setTargetColor(view, COLOR_INACTIVE);
return true;
default:
break;
}
return false;
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch(event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
onDropListener.onDragStarted();
return true;
case DragEvent.ACTION_DRAG_ENTERED:
return true;
case DragEvent.ACTION_DRAG_LOCATION:
// Ignore the event
onDropListener.onDragLocation(event.getX(), event.getY());
return true;
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DROP:
onDropListener.onDrop();
return true;
case DragEvent.ACTION_DRAG_ENDED:
onDropListener.onDragEnded();
return true;
default:
break;
}
return false;
}
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
switch (dragEvent.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
if (dragEvent.getLocalState() == view) {
view.setVisibility(View.INVISIBLE);
}
// 开始拖拽
Log.e(TAG, "开始拖拽");
break;
case DragEvent.ACTION_DRAG_LOCATION:
// 主要是感觉是在拖动中就会回调
// Log.e(TAG, "主要是感觉是在拖动中就会回调");
break;
case DragEvent.ACTION_DROP:
// 向用户已释放拖动阴影的视图发出信号,拖动点位于视图的边界框内,而不在可接受数据的后代视图中。
Log.e(TAG, "向用户已释放拖动阴影的视图发出信号,拖动点位于视图的边界框内,而不在可接受数据的后代视图中。");
break;
case DragEvent.ACTION_DRAG_ENDED:
// 拖拽已结束
Log.e(TAG, "拖拽已结束");
if (dragEvent.getLocalState() == view) {
view.setVisibility(View.VISIBLE);
}
break;
case DragEvent.ACTION_DRAG_ENTERED:
// 拖拽的View已经到了其他View的范围,判断点为手指触摸的位置
if (dragEvent.getLocalState() != view) {
// 每个View都会收到的,所以要排除掉自己
sortView(view);
Log.e(TAG, "拖拽的View已经到了其他View的范围");
}
break;
case DragEvent.ACTION_DRAG_EXITED:
// 移出了当前View的范围,判断点为手指触摸的位置
Log.e(TAG, "移出了当前View的范围");
break;
}
return true;
}
/**
* @param v View
* @param event DragEvent
* @return boolean
*/
@Override
public boolean onDrag(final View v, final DragEvent event)
{
if (v instanceof PipeView)
{
final PipeView pipeView = (PipeView) v;
switch (event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:
{
//init values
xCoord = 0;
yCoord = 0;
dropped = false;
createRecycleBin(pipeView);
break;
}
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
//update drop location
xCoord = event.getX();
yCoord = event.getY();
dropped = true;
ComponentView view = (ComponentView) event.getLocalState();
pipeView.getGrid().setGridValue(view.getGridX(), view.getGridY(), false);
break;
case DragEvent.ACTION_DRAG_ENDED:
cleanup(pipeView, event);
break;
case DragEvent.ACTION_DRAG_LOCATION:
{
// //@todo add scroll behaviour to drag and drop
// HorizontalScrollView horizontalScrollView = (HorizontalScrollView) pipeView.getParent();
// if (horizontalScrollView != null)
// {
// ScrollView scrollView = (ScrollView) horizontalScrollView.getParent();
// if (scrollView != null)
// {
// //way one
// int y = Math.round(event.getY());
// int translatedY = y - scrollView.getScrollY();
// int threshold = 50;
// // make a scrolling up due the y has passed the threshold
// if (translatedY < threshold) {
// // make a scroll up by 30 px
// scrollView.smoothScrollBy(0, -30);
// }
// // make a autoscrolling down due y has passed the 500 px border
// if (translatedY + threshold > 500) {
// // make a scroll down by 30 px
// scrollView.smoothScrollBy(0, 30);
// }
// //way two
// int topOfDropZone = pipeView.getTop();
// int bottomOfDropZone = pipeView.getBottom();
// int scrollY = scrollView.getScrollY();
// int scrollViewHeight = scrollView.getMeasuredHeight();
// Log.d("location: Scroll Y: " + scrollY + " Scroll Y+Height: " + (scrollY + scrollViewHeight));
// Log.d(" top: " + topOfDropZone + " bottom: " + bottomOfDropZone);
// if (bottomOfDropZone > (scrollY + scrollViewHeight - 100))
// {
// scrollView.smoothScrollBy(0, 30);
// }
// if (topOfDropZone < (scrollY + 100))
// {
// scrollView.smoothScrollBy(0, -30);
// }
// }
// }
break;
}
default:
break;
}
return true;
}
return false;
}
@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DRAG_ENTERED:
if(v==mDeleteView) {
mDeleteView.setColorFilter(C.ThemedColors[C.colorAccent]);
mDeleteView.setScaleX(1.2f);
mDeleteView.setScaleY(1.2f);
}
else {
mDeleteView.setColorFilter(C.ThemedColors[C.colorTextNormal]);
mDeleteView.setScaleX(1.0f);
mDeleteView.setScaleY(1.0f);
EntryHolder eh = (EntryHolder) v.getTag();
if (mDragged.mEntryLayout != eh.mEntryLayout) {
int index = mEntries.indexOf(eh);
mDeleteView.animate().setDuration(300).y(v.getY() +
(mItemHeight - mDeleteView.getMeasuredHeight())/2);
eh = mEntries.get(mIndex);
mEntries.remove(mIndex);
mEntries.add(index, eh);
mContainer.removeViewAt(mIndex);
mContainer.addView(eh.mEntryLayout,index);
mIndex = index;
}
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
mDeleteView.setVisibility(View.INVISIBLE);
if(v!=mDeleteView) {
mDragged.mEntryContainer.setVisibility(View.VISIBLE);
mDragged.mEntryLayout.setAlpha(1.0f);
}
return true;
case DragEvent.ACTION_DRAG_LOCATION:
int yPosition = (int)v.getY();
int scrollY = mScroll.getScrollY();
if(yPosition < scrollY) {
mScroll.smoothScrollBy(0, -mItemHeight);
}
if(yPosition - scrollY > mAdjustScrollY) {
mScroll.smoothScrollBy(0, mItemHeight);
}
return true;
case DragEvent.ACTION_DROP:
if(v==mDeleteView) {
delete(mDragged);
}
return true;
}
return false;
}
/**
* Drag and drop
*/
@Override
public boolean onDragEvent(DragEvent event) {
boolean result = false;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED: {
// claim to accept any dragged content
Log.i(TAG, "Drag started, event=" + event);
// cache whether we accept the drag to return for LOCATION events
mDragInProgress = true;
mAcceptsDrag = result = true;
// Redraw in the new visual state if we are a potential drop target
if (mAcceptsDrag) {
invalidate();
}
} break;
case DragEvent.ACTION_DRAG_ENDED: {
Log.i(TAG, "Drag ended.");
if (mAcceptsDrag) {
invalidate();
}
mDragInProgress = false;
mHovering = false;
} break;
case DragEvent.ACTION_DRAG_LOCATION: {
// we returned true to DRAG_STARTED, so return true here
Log.i(TAG, "... seeing drag locations ...");
result = mAcceptsDrag;
} break;
case DragEvent.ACTION_DROP: {
Log.i(TAG, "Got a drop! dot=" + this + " event=" + event);
if (mAnrType == ANR_DROP) {
sleepSixSeconds();
}
processDrop(event);
result = true;
} break;
case DragEvent.ACTION_DRAG_ENTERED: {
Log.i(TAG, "Entered dot @ " + this);
mHovering = true;
invalidate();
} break;
case DragEvent.ACTION_DRAG_EXITED: {
Log.i(TAG, "Exited dot @ " + this);
mHovering = false;
invalidate();
} break;
default:
Log.i(TAG, "other drag event: " + event);
result = mAcceptsDrag;
break;
}
return result;
}