下面列出了怎么用android.view.DragEvent的API类实例代码及写法,或者点击链接到github查看源代码。
private void sendDragStartedLocked(WindowState newWin, float touchX, float touchY,
ClipDescription desc) {
if (mDragInProgress && isValidDropTarget(newWin)) {
DragEvent event = obtainDragEvent(newWin, DragEvent.ACTION_DRAG_STARTED,
touchX, touchY, null, desc, null, null, false);
try {
newWin.mClient.dispatchDragEvent(event);
// track each window that we've notified that the drag is starting
mNotifiedWindows.add(newWin);
} catch (RemoteException e) {
Slog.w(TAG_WM, "Unable to drag-start window " + newWin);
} finally {
// if the callee was local, the dispatch has already recycled the event
if (Process.myPid() != newWin.mSession.mPid) {
event.recycle();
}
}
}
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
if (event.getLocalState() == v) {
v.setVisibility(INVISIBLE);
}
break;
case DragEvent.ACTION_DRAG_ENTERED:
System.out.println("draggg");
if (event.getLocalState() != v) {
sort(v);
}
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DRAG_ENDED:
v.setVisibility(VISIBLE);
break;
}
return true;
}
@Override
public boolean onDrag(View view, DragEvent event) {
if (mLauncher == null || mDragController == null) {
postCleanup();
return false;
}
if (event.getAction() == DragEvent.ACTION_DRAG_STARTED) {
if (onDragStart(event)) {
return true;
} else {
postCleanup();
return false;
}
}
return mDragController.onDragEvent(mDragStartTime, event);
}
public QuickRow(final View.OnDragListener dragListener, MainActivity mainActivity) {
mMainActivity = mainActivity;
mStyle = GlobState.getStyle(mMainActivity);
mQuickRow = mMainActivity.findViewById(R.id.layout_quickrow);
mQuickRowScroller = mMainActivity.findViewById(R.id.layout_quickrow_scroll);
mQuickRow.setOnDragListener(dragListener);
mQuickRowScroller.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
return dragListener.onDrag(mQuickRow, dragEvent);
}
});
}
/**
* Handles drag event.
*/
@Override
public boolean onDragEvent(DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// Only handle plain text drag and drop.
return event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
case DragEvent.ACTION_DRAG_ENTERED:
requestFocus();
return true;
case DragEvent.ACTION_DROP:
handlePasteClip(event.getClipData());
return true;
}
return false;
}
/**
* Handles drag event.
*/
@Override
public boolean onDragEvent(DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// Only handle plain text drag and drop.
return event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
case DragEvent.ACTION_DRAG_ENTERED:
requestFocus();
return true;
case DragEvent.ACTION_DROP:
handlePasteClip(event.getClipData());
return true;
}
return false;
}
@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 dispatchDragEvent(DragEvent e) {
ContentViewCore contentViewCore = mTabVisible.getContentViewCore();
if (contentViewCore == null) return false;
if (mLayoutManager != null) mLayoutManager.getViewportPixel(mCacheViewport);
contentViewCore.setCurrentTouchEventOffsets(-mCacheViewport.left, -mCacheViewport.top);
boolean ret = super.dispatchDragEvent(e);
int action = e.getAction();
if (action == DragEvent.ACTION_DRAG_EXITED || action == DragEvent.ACTION_DRAG_ENDED
|| action == DragEvent.ACTION_DROP) {
contentViewCore.setCurrentTouchEventOffsets(0.f, 0.f);
}
return ret;
}
@Override
public boolean dispatchDragEvent(DragEvent e) {
ContentViewCore contentViewCore = mTabVisible.getContentViewCore();
if (contentViewCore == null) return false;
if (mLayoutManager != null) mLayoutManager.getViewportPixel(mCacheViewport);
contentViewCore.setCurrentTouchEventOffsets(-mCacheViewport.left, -mCacheViewport.top);
boolean ret = super.dispatchDragEvent(e);
int action = e.getAction();
if (action == DragEvent.ACTION_DRAG_EXITED || action == DragEvent.ACTION_DRAG_ENDED
|| action == DragEvent.ACTION_DROP) {
contentViewCore.setCurrentTouchEventOffsets(0.f, 0.f);
}
return ret;
}
/**
* 获取拖拽触发的执行事件类型
*
* @param draggedViewPager 最外层 {@link com.bigfat.draggedviewpager.view.MDA_DraggedViewPager}
* @param currentPageIndex 当前页索引
* @param pageIndex 响应拖拽事件item所在页索引
* @param view 响应拖拽事件的item
* @param event 拖拽事件
* @return 拖拽事件类型
*/
public static DragEventType getDragEventType(MDA_DraggedViewPager draggedViewPager, int currentPageIndex, int pageIndex,
View view, DragEvent event) {
if (currentPageIndex > 0//有上一页
&& (draggedViewPager.getPageDragSetting() == null || draggedViewPager.getPageDragSetting()
.canBeSwiped(currentPageIndex - 1))//上一页可被交换
//触摸至上一页//或至触摸至当前页左边界,则切换到上一页
&& (pageIndex < currentPageIndex || (pageIndex == currentPageIndex && event.getX() < view.getWidth() / 8))) {
return DragEventType.SCROLL_PREVIOUS;
} else if (currentPageIndex < (draggedViewPager.getContainer().getChildCount() - 1)//在有下一页的前提下
&& (draggedViewPager.getPageDragSetting() == null || draggedViewPager.getPageDragSetting()
.canBeSwiped(currentPageIndex + 1))//下一页可被交换
//触摸至下一页//或至触摸至当前页右边界,则切换到下一页
&& (pageIndex > currentPageIndex || (pageIndex == currentPageIndex && event.getX() > view.getWidth() / 8 * 7))) {
return DragEventType.SCROLL_NEXT;
}
return DragEventType.DEFAULT;
}
@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)
{
try
{
switch (event.getAction ())
{
case DragEvent.ACTION_DRAG_ENTERED:
this.appManager.startedDraggingPinnedApp ();
break;
case DragEvent.ACTION_DROP:
case DragEvent.ACTION_DRAG_EXITED:
this.appManager.stoppedDraggingPinnedApp ();
break;
}
}
catch (Exception ex)
{
ExceptionHandler exh = new ExceptionHandler (ex);
exh.show (this.appManager.getContext ());
}
return true;
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
v.setBackground(enterShape);
break;
case DragEvent.ACTION_DRAG_EXITED:
v.setBackground(normalShape);
break;
case DragEvent.ACTION_DROP:
// view dropped, reassign the view to the new ViewGroup
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
v.setBackground(normalShape);
default:
break;
}
return true;
}
@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;
}
private boolean processDrop(View view, DragEvent event) {
ClipData clipData = event.getClipData();
if (clipData == null || clipData.getItemCount() == 0) {
return false;
}
ClipData.Item item = clipData.getItemAt(0);
if (item == null) {
return false;
}
Uri uri = item.getUri();
if (uri == null) {
return false;
}
return setImageUri(view, event, uri);
}
protected boolean setImageUri(View view, DragEvent event, Uri uri) {
if (!(view instanceof ImageView)) {
return false;
}
((ImageView) view).setImageURI(uri);
return true;
}
@Override
public boolean onDrag(View view, DragEvent event) {
// DragTarget is peeking into the MIME types of the dragged event in order to ignore
// non-image drags completely.
// DragSource does not do that but rejects non-image content once a drop has happened.
ClipDescription clipDescription = event.getClipDescription();
if (clipDescription != null && !clipDescription.hasMimeType("image/*")) {
return false;
}
// Callback received when image is being dragged.
return super.onDrag(view, event);
}
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
v.setBackgroundDrawable(enterShape);
break;
case DragEvent.ACTION_DRAG_EXITED:
v.setBackgroundDrawable(normalShape);
break;
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
// TODO 1 removeView from owner
// TODO 2 add to v which is a LinearLayout
// TODO 3 set view to View.Visible
break;
case DragEvent.ACTION_DRAG_ENDED:
v.setBackgroundDrawable(normalShape);
default:
break;
}
return true;
}
@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;
}
private boolean processDrop(View view, DragEvent event) {
ClipData clipData = event.getClipData();
if (clipData == null || clipData.getItemCount() == 0) {
return false;
}
ClipData.Item item = clipData.getItemAt(0);
if (item == null) {
return false;
}
Uri uri = item.getUri();
if (uri == null) {
return false;
}
return setImageUri(view, event, uri);
}
protected boolean setImageUri(View view, DragEvent event, Uri uri) {
if (!(view instanceof ImageView)) {
return false;
}
((ImageView) view).setImageURI(uri);
return true;
}
/**
* 计算控件位置
*/
private void compute(int type, Rect rect, DragEvent event){
int size = mPhoneContentWidth / WIDTH_COUNT - dp2px(10);
int x = (int) event.getX();
int y = (int) event.getY();
if (type == ONE_BY_ONE_PIC || type == ONE_BY_ONE_TEXT){
// 1 * 1 方格
rect.left = x - size / 2;
rect.top = y - size / 2;
rect.right = x + size / 2;
rect.bottom = y + size / 2;
}else if (type == THREE_BY_THREE_PIC){
// 3 * 3 方格
rect.left = x - size * 3 / 2;
rect.top = y - size * 3 / 2;
rect.right = x + size * 3 / 2;
rect.bottom = y + size * 3 / 2;
}else if (type == ONE_BY_TWO_PIC){
// 1 * 2 方格
rect.left = x - size / 2;
rect.top = y - size;
rect.right = x + size / 2;
rect.bottom = y + size;
}
}
boolean processDragStarted(DragEvent event) {
// Determine whether to continue processing drag and drop based on the
// plain text mime type.
ClipDescription clipDesc = event.getClipDescription();
if (clipDesc != null) {
return clipDesc.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
}
return false;
}
@Override
public boolean onDrag(final View view, final DragEvent event) {
final View.OnDragListener listener = this.listeners.get(event.getLocalState());
if (listener == null) {
return false;
}
return listener.onDrag(view, event);
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
if (v instanceof LinearLayout) {
LinearLayout layout = (LinearLayout) v;
TextView textView = new TextView(getContext());
textView.setTextSize(16);
textView.setText(event.getClipData().getItemAt(0).getText());
layout.addView(textView);
}
break;
}
return true;
}
private void processDrop(DragEvent event) {
final ClipData data = event.getClipData();
final int N = data.getItemCount();
for (int i = 0; i < N; i++) {
ClipData.Item item = data.getItemAt(i);
Log.i(TAG, "Dropped item " + i + " : " + item);
if (mReportView != null) {
String text = item.coerceToText(getContext()).toString();
if (event.getLocalState() == (Object) this) {
text += " : Dropped on self!";
}
mReportView.setText(text);
}
}
}
@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;
}
}
boolean processDrop(DragEvent event, ImageView imageView) {
// Attempt to parse clip data with expected format: category||entry_id.
// Ignore event if data does not conform to this format.
ClipData data = event.getClipData();
if (data != null) {
if (data.getItemCount() > 0) {
Item item = data.getItemAt(0);
String textData = (String) item.getText();
if (textData != null) {
StringTokenizer tokenizer = new StringTokenizer(textData, "||");
if (tokenizer.countTokens() != 2) {
return false;
}
int category = -1;
int entryId = -1;
try {
category = Integer.parseInt(tokenizer.nextToken());
entryId = Integer.parseInt(tokenizer.nextToken());
} catch (NumberFormatException exception) {
return false;
}
updateContentAndRecycleBitmap(category, entryId);
// Update list fragment with selected entry.
TitlesFragment titlesFrag = (TitlesFragment)
getFragmentManager().findFragmentById(R.id.frag_title);
titlesFrag.selectPosition(entryId);
return true;
}
}
}
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;
}