List of usage examples for android.view DragEvent getY
public float getY()
From source file:com.jaspersoft.android.jaspermobile.widget.DraggableViewsContainer.java
@Override public boolean onDrag(View v, DragEvent event) { int viewId;//ww w.ja v a 2 s .com View noteView; switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: viewId = Integer.parseInt(event.getClipDescription().getLabel().toString()); noteView = findViewById(viewId); noteView.setVisibility(View.GONE); return true; case DragEvent.ACTION_DROP: viewId = Integer.parseInt(event.getClipDescription().getLabel().toString()); noteView = findViewById(viewId); noteView.setX(event.getX() - noteView.getWidth() / 2); noteView.setY(event.getY() - noteView.getHeight() / 2); noteView.setVisibility(View.VISIBLE); return true; default: return false; } }
From source file:com.google.blockly.android.ui.Dragger.java
/** * Move the currently dragged block in response to a new {@link MotionEvent}. * <p/>//ww w .j a v a 2s.c om * All of the child blocks move with the root block based on its position during layout. * * @param event The {@link MotionEvent} to react to. */ private void updateBlockPosition(DragEvent event) { // The event is relative to the WorkspaceView. Grab the pixel offset within. ViewPoint curDragLocationPixels = mTempViewPoint; curDragLocationPixels.set((int) event.getX(), (int) event.getY()); WorkspacePoint curDragPositionWorkspace = mTempWorkspacePoint; mHelper.virtualViewToWorkspaceCoordinates(curDragLocationPixels, curDragPositionWorkspace); WorkspacePoint touchDownWorkspace = mPendingDrag.getTouchDownWorkspaceCoordinates(); // Subtract original drag location from current location to get delta int workspaceDeltaX = curDragPositionWorkspace.x - touchDownWorkspace.x; int workspaceDeltaY = curDragPositionWorkspace.y - touchDownWorkspace.y; WorkspacePoint blockOrigPosition = mPendingDrag.getOriginalBlockPosition(); mPendingDrag.getRootDraggedBlock().setPosition(blockOrigPosition.x + workspaceDeltaX, blockOrigPosition.y + workspaceDeltaY); mPendingDrag.getDragGroup().requestLayout(); }
From source file:com.google.blockly.android.ui.Dragger.java
/** * Check whether the given event occurred on top of the trash can button. Should be called from * {@link WorkspaceView}.//from w w w.java2s . c om * * @param event The event whose location should be checked, with position in WorkspaceView * coordinates. * @return Whether the event was on top of the trash can button. */ // TODO(#210): Generalize this to other possible block drop targets. private boolean touchingTrashView(DragEvent event) { if (mTrashView == null) { return false; } mTrashView.getLocationOnScreen(mTempScreenCoord1); mTrashView.getHitRect(mTrashRect); mTrashRect.offset((mTempScreenCoord1[0] - mTrashRect.left), (mTempScreenCoord1[1] - mTrashRect.top)); // Get the touch location on the screen mTempViewPoint.set((int) event.getX(), (int) event.getY()); mHelper.virtualViewToScreenCoordinates(mTempViewPoint, mTempViewPoint); // Check if the touch location was on the trash return mTrashRect.contains(mTempViewPoint.x, mTempViewPoint.y); }
From source file:com.launcher.silverfish.HomeScreenFragment.java
private void setOnDragListener() { rootView.setOnDragListener(new View.OnDragListener() { @Override/*from w w w . j a v a2 s. co m*/ public boolean onDrag(View view, DragEvent dragEvent) { switch (dragEvent.getAction()) { case DragEvent.ACTION_DRAG_STARTED: // Check that it is a shortcut removal gesture ClipDescription cd = dragEvent.getClipDescription(); if (!cd.getLabel().toString().equals(Constants.DRAG_SHORTCUT_REMOVAL)) { return false; } break; case DragEvent.ACTION_DRAG_ENTERED: // Don't do anything break; case DragEvent.ACTION_DRAG_LOCATION: //Don't do anything break; case DragEvent.ACTION_DROP: // If outside of bound, remove the app if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) { String appId = dragEvent.getClipData().getItemAt(0).getText().toString(); String appIndex = dragEvent.getClipData().getItemAt(1).getText().toString(); removeApp(Integer.parseInt(appIndex), Long.parseLong(appId)); updateShortcuts(); } break; case DragEvent.ACTION_DRAG_ENDED: // Hide the remove-indicator FrameLayout rem_ind = (FrameLayout) rootView.findViewById(R.id.remove_indicator); rem_ind.setVisibility(View.INVISIBLE); break; } return true; } }); }
From source file:com.launcher.silverfish.launcher.appdrawer.TabbedAppDrawerFragment.java
private void setOnDragListener() { rootView.setOnDragListener(new View.OnDragListener() { @Override/*from ww w . j av a 2s.c o m*/ public boolean onDrag(View view, DragEvent dragEvent) { switch (dragEvent.getAction()) { case DragEvent.ACTION_DRAG_STARTED: { // Care only about DRAG_APP_MOVE drags. ClipDescription cd = dragEvent.getClipDescription(); if (!cd.getLabel().toString().equals(Constants.DRAG_APP_MOVE)) return false; // Starting movement, drag offset is now reset to 0 dragOffsetX = 0; dragOffsetY = 0; // Show the uninstall indicator showUninstallIndicator(); break; } case DragEvent.ACTION_DRAG_ENTERED: { // Don't do anything break; } case DragEvent.ACTION_DRAG_LOCATION: { // getX() and getY() now return relative offsets, // so accumulate them to get the total movement dragOffsetX += dragEvent.getX(); dragOffsetY += dragEvent.getY(); // If drag is on the way out of this page then stop receiving drag events int threshold = Constants.SCREEN_CORNER_THRESHOLD; // Get display size int screen_width = Utils.getScreenDimensions(getActivity()).x; if (dragEvent.getX() > screen_width - threshold) { return false; } else { // Check if the drag is hovering over a tab button int i = tabHandler.getHoveringTab(dragEvent.getX(), dragEvent.getY()); // If so, change to that tab if (i > -1) tabHandler.setTab(i); } break; } case DragEvent.ACTION_DROP: { String appName = dragEvent.getClipData().getItemAt(0).getText().toString(); // If app is dropped on the uninstall indicator uninstall the app if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) { launchUninstallIntent(appName); } else { // If the user didn't move the application from its original // place (too much), then they might want to show a menu with more options float distSq = (dragOffsetX * dragOffsetX) + (dragOffsetY * dragOffsetY); if (distSq < Constants.NO_DRAG_THRESHOLD_SQ) { showExtraOptionsMenu(appName); } else { // Retrieve tha drop information and remove it from the original tab int appIndex = Integer .parseInt(dragEvent.getClipData().getItemAt(1).getText().toString()); String tabTag = dragEvent.getClipData().getItemAt(2).getText().toString(); removeAppFromTab(appIndex, tabTag); // add it to the new tab String app_name = dragEvent.getClipData().getItemAt(0).getText().toString(); dropAppInTab(app_name); } } break; } case DragEvent.ACTION_DRAG_ENDED: { // Just hide the uninstall indicator hideUninstallIndicator(); break; } } return true; } }); }
From source file:com.launcher.silverfish.TabbedAppDrawerFragment.java
private void setOnDragListener() { rootView.setOnDragListener(new View.OnDragListener() { @Override/*w w w. j a v a 2 s . c om*/ public boolean onDrag(View view, DragEvent dragEvent) { switch (dragEvent.getAction()) { case DragEvent.ACTION_DRAG_STARTED: { // Care only about DRAG_APP_MOVE drags. ClipDescription cd = dragEvent.getClipDescription(); if (!cd.getLabel().toString().equals(Constants.DRAG_APP_MOVE)) return false; // Show the uninstall indicator showUninstallIndicator(); break; } case DragEvent.ACTION_DRAG_ENTERED: { // Don't do anything break; } case DragEvent.ACTION_DRAG_LOCATION: { // If drag is on the way out of this page then stop receiving drag events int threshold = Constants.SCREEN_CORNER_THRESHOLD; // Get display size int screen_width = Utils.getScreenDimensions(getActivity()).x; if (dragEvent.getX() > screen_width - threshold) { return false; } else { // Check if the drag is hovering over a tab button int i = tabHandler.getHoveringTab(dragEvent.getX(), dragEvent.getY()); // If so, change to that tab if (i > -1) tabHandler.setTab(i); } break; } case DragEvent.ACTION_DROP: { // If app is dropped on the uninstall indicator uninstall the app if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) { String app_name = dragEvent.getClipData().getItemAt(0).getText().toString(); launchUninstallIntent(app_name); } else { // retrieve tha drop information and remove it from the original tab int app_index = Integer.parseInt(dragEvent.getClipData().getItemAt(1).getText().toString()); String tab_tag = dragEvent.getClipData().getItemAt(2).getText().toString(); removeAppFromTab(app_index, tab_tag); // add it to the new tab String app_name = dragEvent.getClipData().getItemAt(0).getText().toString(); dropAppInTab(app_name); } break; } case DragEvent.ACTION_DRAG_ENDED: { // Just hide the uninstall indicator hideUninstallIndicator(); break; } } return true; } }); }
From source file:rosmi.acagild.alarmclock.ringing.AlarmRingingFragment.java
@Nullable @Override//w w w . j a v a2 s . c o m public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Logger.init(getActivity()); Bundle args = getArguments(); UUID alarmId = UUID.fromString(args.getString(ARGS_ALARM_ID)); mAlarm = AlarmList.get(getContext()).getAlarm(alarmId); View view = inflater.inflate(R.layout.fragment_alarm_ringing, container, false); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) { TextView timeField = (TextView) view.findViewById(R.id.alarm_ringing_time); timeField.setText(DateTimeUtilities.getUserTimeString(getContext(), mAlarm.getTimeHour(), mAlarm.getTimeMinute())); } TextView dateField = (TextView) view.findViewById(R.id.alarm_ringing_date); dateField.setText(DateTimeUtilities.getFullDateStringForNow()); String name = mAlarm.getTitle(); TextView titleField = (TextView) view.findViewById(R.id.alarm_ringing_title); titleField.setText(name); ImageView dismissButton = (ImageView) view.findViewById(R.id.alarm_ringing_dismiss); dismissButton.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DROP: dismissAlarm(); break; case DragEvent.ACTION_DRAG_ENDED: if (mShowClockOnDragEnd) { mAlarmRingingClock.postDelayed(new Runnable() { @Override public void run() { mAlarmRingingClock.setVisibility(View.VISIBLE); } }, SHOW_CLOCK_AFTER_UNSUCCESSFUL_DRAG_DELAY); } break; default: break; } return true; } }); // Dismiss ringing if someone presses the dismiss button directly dismissButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismissAlarm(); } }); ImageView snoozeButton = (ImageView) view.findViewById(R.id.alarm_ringing_snooze); snoozeButton.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DROP: mCallback.onRingingSnooze(); break; default: break; } return true; } }); // Snooze ringing if someone presses the snooze button directly snoozeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mCallback.onRingingSnooze(); } }); // Allow the view to listen to the drag event to update arrow animations accordingly view.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_LOCATION: // Update the left/right arrow visibility based on the current drag location. onClockDragLocation(event.getX(), event.getY(), v.getWidth() / 2); break; case DragEvent.ACTION_DROP: // The user has dropped the drag, but it is dropped within the view, instead of the target // drop zones to dismiss or snooze. // Restore to show both left arrow and right arrow animations. mDragZone = DragZone.NEAR_MIDDLE_OF_VIEW; updateArrowsBasedOnDragZone(mDragZone); break; default: break; } return true; } }); mAlarmRingingClock = (ImageView) view.findViewById(R.id.alarm_ringing_clock); mAlarmRingingClock.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { ClipData dragData = ClipData.newPlainText("", ""); View.DragShadowBuilder shadow = new View.DragShadowBuilder(mAlarmRingingClock); mAlarmRingingClock.startDrag(dragData, shadow, null, 0); mAlarmRingingClock.setVisibility(View.INVISIBLE); return true; } else { return false; } } }); initializeClockAnimation(view); Loggable.AppAction appAction = new Loggable.AppAction(Loggable.Key.APP_ALARM_RINGING); appAction.putJSON(mAlarm.toJSON()); Logger.track(appAction); return view; }
From source file:com.microsoft.mimickeralarm.ringing.AlarmRingingFragment.java
@Nullable @Override/* w ww . j a v a 2 s . c o m*/ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Logger.init(getActivity()); Bundle args = getArguments(); UUID alarmId = UUID.fromString(args.getString(ARGS_ALARM_ID)); mAlarm = AlarmList.get(getContext()).getAlarm(alarmId); View view = inflater.inflate(R.layout.fragment_alarm_ringing, container, false); if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) { TextView timeField = (TextView) view.findViewById(R.id.alarm_ringing_time); timeField.setText(DateTimeUtilities.getUserTimeString(getContext(), mAlarm.getTimeHour(), mAlarm.getTimeMinute())); } TextView dateField = (TextView) view.findViewById(R.id.alarm_ringing_date); dateField.setText(DateTimeUtilities.getFullDateStringForNow()); String name = mAlarm.getTitle(); TextView titleField = (TextView) view.findViewById(R.id.alarm_ringing_title); titleField.setText(name); ImageView dismissButton = (ImageView) view.findViewById(R.id.alarm_ringing_dismiss); dismissButton.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DROP: dismissAlarm(); break; case DragEvent.ACTION_DRAG_ENDED: if (mShowClockOnDragEnd) { mAlarmRingingClock.postDelayed(new Runnable() { @Override public void run() { mAlarmRingingClock.setVisibility(View.VISIBLE); } }, SHOW_CLOCK_AFTER_UNSUCCESSFUL_DRAG_DELAY); } break; default: break; } return true; } }); // Dismiss ringing if someone presses the dismiss button directly dismissButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismissAlarm(); } }); ImageView snoozeButton = (ImageView) view.findViewById(R.id.alarm_ringing_snooze); snoozeButton.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DROP: mCallback.onRingingSnooze(); break; default: break; } return true; } }); // Snooze ringing if someone presses the snooze button directly snoozeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mCallback.onRingingSnooze(); } }); // Allow the view to listen to the drag event to update arrow animations accordingly view.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_LOCATION: // Update the left/right arrow visibility based on the current drag location. onClockDragLocation(event.getX(), event.getY(), v.getWidth() / 2); break; case DragEvent.ACTION_DROP: // The user has dropped the drag, but it is dropped within the view, instead of the target // drop zones to dismiss or snooze. // Restore to show both left arrow and right arrow animations. mDragZone = DragZone.NEAR_MIDDLE_OF_VIEW; updateArrowsBasedOnDragZone(mDragZone); break; default: break; } return true; } }); mAlarmRingingClock = (ImageView) view.findViewById(R.id.alarm_ringing_clock); mAlarmRingingClock.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { ClipData dragData = ClipData.newPlainText("", ""); View.DragShadowBuilder shadow = new View.DragShadowBuilder(mAlarmRingingClock); mAlarmRingingClock.startDrag(dragData, shadow, null, 0); mAlarmRingingClock.setVisibility(View.INVISIBLE); return true; } else { return false; } } }); initializeClockAnimation(view); Loggable.AppAction appAction = new Loggable.AppAction(Loggable.Key.APP_ALARM_RINGING); appAction.putJSON(mAlarm.toJSON()); Logger.track(appAction); return view; }
From source file:app.umitems.greenclock.widget.sgv.StaggeredGridView.java
@Override public boolean onDragEvent(DragEvent ev) { if (!isDragReorderingSupported()) { // If the consumer of this StaggeredGridView has not registered a ReorderListener, // don't bother handling drag events. return false; }/*w w w . j a v a 2 s .com*/ final int x = (int) ev.getX(); final int y = (int) ev.getY(); switch (ev.getAction()) { case DragEvent.ACTION_DRAG_LOCATION: if (mDragState == ReorderUtils.DRAG_STATE_DRAGGING) { handleDrag(x, y); mLastTouchY = y; } // Kick off the scroll handler on the first drag location event, // if it's not already running if (!mIsDragScrollerRunning && // And if the distance traveled while dragging exceeds the touch slop ((Math.abs(x - mTouchDownForDragStartX) >= 4 * mTouchSlop) || (Math.abs(y - mTouchDownForDragStartY) >= 4 * mTouchSlop))) { // Set true because that the scroller is running now mIsDragScrollerRunning = true; if (mScrollHandler == null) { mScrollHandler = getHandler(); } mScrollHandler.postDelayed(mDragScroller, SCROLL_HANDLER_DELAY); } return true; case DragEvent.ACTION_DROP: case DragEvent.ACTION_DRAG_ENDED: // We can either expect to receive: // 1. Both {@link DragEvent#ACTION_DROP} and then // {@link DragEvent#ACTION_DRAG_ENDED} if the drop is over this view. // 2. Only {@link DragEvent#ACTION_DRAG_ENDED} if the drop happened over a // different view. // For this reason, we should always handle the drop. In case #1, if this code path // gets executed again then nothing will happen because we will have already // updated {@link #mDragState} to not be {@link ReorderUtils#DRAG_STATE_DRAGGING}. if (mScrollHandler != null) { mScrollHandler.removeCallbacks(mDragScroller); // Scroller is no longer running mIsDragScrollerRunning = false; } return true; } return false; }
From source file:com.android.systemui.qs.QSDragPanel.java
@Override public boolean onDrag(View v, DragEvent event) { final DragTileRecord targetTile = (DragTileRecord) getRecord(v); boolean originatingTileEvent = mDraggingRecord != null && v == mDraggingRecord.tileView; final int dragRecordIndex = mRecords.indexOf(mDraggingRecord); boolean dragRecordAttached = dragRecordIndex != -1; switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: if (DEBUG_DRAG) { Log.v(TAG, "ACTION_DRAG_STARTED on view: " + v); }/* w w w . jav a 2 s .c om*/ if (originatingTileEvent) { if (DEBUG_DRAG) { Log.v(TAG, "ACTION_DRAG_STARTED on target view."); } mRestored = false; mQsPanelTop.setDropIcon(R.drawable.ic_qs_tile_delete_disable, R.color.qs_tile_trash_normal_tint); } break; case DragEvent.ACTION_DRAG_ENTERED: if (DEBUG_DRAG) { if (targetTile != null) { Log.v(TAG, "ACTION_DRAG_ENTERED on view with tile: " + targetTile); } else { Log.v(TAG, "ACTION_DRAG_ENTERED on view: " + v); } } mLocationHits = 0; mMovedByLocation = false; if (v == mQsPanelTop) { int icon, color; if (mDraggingRecord.tile instanceof EditTile) { // use a different warning, user can't erase this one icon = R.drawable.ic_qs_tile_delete_disable_avd; color = R.color.qs_tile_trash_delete_tint_warning; } else { icon = R.drawable.ic_qs_tile_delete_disable; color = R.color.qs_tile_trash_delete_tint; } mQsPanelTop.setDropIcon(icon, color); } if (!originatingTileEvent && v != getDropTarget() && targetTile != null) { if (DEBUG_DRAG) { Log.e(TAG, "entered tile " + targetTile); } if (mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging() && !dragRecordAttached) { mMovedByLocation = true; shiftTiles(targetTile, true); } else { if (DEBUG_DRAG) { Log.w(TAG, "ignoring action enter for animating tiles and fake drags"); } } } break; case DragEvent.ACTION_DRAG_ENDED: if (DEBUG_DRAG) { Log.v(TAG, "ACTION_DRAG_ENDED on view: " + v + "(tile: " + targetTile + "), result: " + event.getResult()); } if (originatingTileEvent && !event.getResult()) { // view pager probably ate the event restoreDraggingTilePosition(v, null); } break; case DragEvent.ACTION_DROP: if (DEBUG_DRAG) { Log.v(TAG, "ACTION_DROP, event loc: " + event.getX() + ", " + event.getY() + " + with tile: " + targetTile + " and view: " + v); } mLastTouchLocationX = event.getX(); mLastTouchLocationY = event.getY(); if (isDropTargetEvent(event, v)) { if (DEBUG_DRAG) { Log.d(TAG, "dropping on delete target!!"); } if (mDraggingRecord.tile instanceof EditTile) { final QSTileView editTileView = mDraggingRecord.tileView; mQsPanelTop.toast(R.string.quick_settings_cannot_delete_edit_tile); restoreDraggingTilePosition(v, new Runnable() { @Override public void run() { // move edit tile to the back final TileRecord editTile = getRecord(editTileView); if (mRecords.remove(editTile)) { // we depend on mHost.setTiles() placing it on the end persistRecords(); } } }); break; } else if (mDraggingRecord.tile instanceof CustomQSTile) { ((CustomQSTile) mDraggingRecord.tile).setUserRemoved(true); final String spec = mHost.getSpec(mDraggingRecord.tile); restoreDraggingTilePosition(v, new Runnable() { @Override public void run() { // it might get added back later by the app, but that's ok, // we just want to reset its position after it has been removed. mHost.remove(spec); } }); } else { mRestored = true; removeDraggingRecord(); } } else { restoreDraggingTilePosition(v, null); } break; case DragEvent.ACTION_DRAG_EXITED: if (DEBUG_DRAG) { if (targetTile != null) { Log.v(TAG, "ACTION_DRAG_EXITED on view with tile: " + targetTile); } else { Log.v(TAG, "ACTION_DRAG_EXITED on view: " + v); } } if (v == mQsPanelTop) { mQsPanelTop.setDropIcon(R.drawable.ic_qs_tile_delete_disable, R.color.qs_tile_trash_normal_tint); } if (originatingTileEvent && mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging() && dragRecordAttached && mLastLeftShift == -1) { if (DEBUG_DRAG) { Log.v(TAG, "target: " + targetTile + ", hit mLastRightShift: " + mLastRightShift + ", mLastLeftShift: " + mLastLeftShift + ", dragRecordIndex: " + dragRecordIndex); } // move tiles back shiftTiles(mDraggingRecord, false); break; } // fall through so exit events can trigger a left shift case DragEvent.ACTION_DRAG_LOCATION: mLastTouchLocationX = event.getX(); mLastTouchLocationY = event.getY(); // do nothing if we're animating tiles if (mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging()) { if (v == mViewPager) { // do we need to change pages? int x = (int) event.getX(); int width = mViewPager.getWidth(); int scrollPadding = (int) (width * QSViewPager.SCROLL_PERCENT); if (x < scrollPadding) { if (mViewPager.canScrollHorizontally(-1)) { mViewPager.animatePagerTransition(false); return true; } } else if (x > width - scrollPadding) { if (mViewPager.canScrollHorizontally(1)) { mViewPager.animatePagerTransition(true); return true; } } } if (DEBUG_DRAG) { Log.v(TAG, "location hit:// target: " + targetTile + ", hit mLastRightShift: " + mLastRightShift + ", mLastLeftShift: " + mLastLeftShift + ", dragRecordIndex: " + dragRecordIndex + ", originatingTileEvent: " + originatingTileEvent + ", mLocationHits: " + mLocationHits + ", mMovedByLocation: " + mMovedByLocation); } if (v != getDropTarget() && targetTile != null && !dragRecordAttached) { // dragging around on another tile if (mLocationHits++ == 30) { if (DEBUG_DRAG) { Log.w(TAG, "shifting right due to location hits."); } // add dragging tile to current page shiftTiles(targetTile, true); mMovedByLocation = true; } else { mLocationHits++; } } else if (mLastRightShift != -1 // right has shifted recently && mLastLeftShift == -1 // -1 means its attached && dragRecordIndex == mLastRightShift && !originatingTileEvent && !mMovedByLocation /* helps avoid continuous shifting */) { // check if the location is on another tile/view // that is not the last drag index, shift back left to revert back and // potentially get ready for shifting right if (DEBUG_DRAG) { Log.w(TAG, "conditions met to reverse!!!! shifting left. <<<<<<<"); } shiftTiles((DragTileRecord) mRecords.get(mLastRightShift), false); mMovedByLocation = true; } } else { if (DEBUG_DRAG) { Log.i(TAG, "ignoring location event because things are animating, size: " + mCurrentlyAnimating.size()); } } break; default: Log.w(TAG, "unhandled event"); return false; } return true; }