自定義拖拽效果
如圖,要想實現上圖的效果,需要自定義ViewGroup,自定義ViewGroup的程式碼如下:
public class DragSlideLayout extends RelativeLayout {
private View mDragView;
private ViewDragHelper mDragHelper;
public DragSlideLayout(Context context) {
super(context);
init();
}
public DragSlideLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DragSlideLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mDragHelper = ViewDragHelper.create(this, 1.0f, new DragHelperCallback());
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
int childCount = getChildCount();
mDragView = getChildAt(childCount - 1);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = MotionEventCompat.getActionMasked(ev);
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
mDragHelper.cancel();
return false;
}
return mDragHelper.shouldInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
mDragHelper.processTouchEvent(ev);
return true;
}
class DragHelperCallback extends ViewDragHelper.Callback {
@Override
public boolean tryCaptureView(View child, int pointerId) {
return child == mDragView;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy) {
final int topBound = getPaddingTop();
final int bottomBound = getHeight() - mDragView.getHeight() - getPaddingBottom();
return Math.min(Math.max(top, topBound), bottomBound);
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx) {
final int leftBound = getPaddingLeft();
final int rightBound = getWidth() - mDragView.getWidth() - getPaddingRight();
return Math.min(Math.max(left, leftBound), rightBound);
}
@Override
public int getViewVerticalDragRange(View child) {
return getMeasuredHeight() - child.getMeasuredHeight();
}
@Override
public int getViewHorizontalDragRange(View child) {
return getMeasuredWidth() - child.getMeasuredWidth() - getPaddingRight();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
super.onViewReleased(releasedChild, xvel, yvel);
int leftBound = getPaddingLeft();
int rightBound = getViewHorizontalDragRange(releasedChild);
int toTarget = releasedChild.getX() > (getMeasuredWidth() / 2 - releasedChild.getMeasuredWidth() / 2) ? rightBound : leftBound;
mDragHelper.settleCapturedViewAt(toTarget, (int) releasedChild.getY());
invalidate();
}
}
@Override
public void computeScroll() {
if (mDragHelper.continueSettling(true)) {
invalidate();
}
}
}
其中xml的程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<com.example.itservice.myapplication.DragSlideLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_store_guide"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="30dp"
android:layout_marginRight="30dp"
android:src="@mipmap/ic_guide_from" />
</com.example.itservice.myapplication.DragSlideLayout>
相關文章
- 自定義view之模擬qq訊息拖拽刪除效果View
- iOS 自定義拖拽式控制元件:QiDragViewiOS控制元件View
- iOS自定義UIView動畫效果iOSUIView動畫
- JavaScript拖拽效果JavaScript
- Smartisan OS一步之自定義拖拽內容
- WPF自定義Panel:讓拖拽變得更簡單
- 原生JS拖拽效果JS
- canvas矩形拖拽效果Canvas
- Android 自定義View 點贊效果AndroidView
- 讓拖拽更加人性化?如何自定義dragover樣式Go
- 使用者自定義控制元件拖拽失敗問題控制元件
- 自定義實現MIUI的拖動視差效果(阻尼效果)UI
- html頁面自定義文字水印效果案例HTML
- css自定義屬性和聚光燈效果CSS
- js自定義select下拉選單效果JS
- jquery 擴充套件方法($.fn.extend/$.extend) 自定義外掛 拖拽jQuery套件
- jQuery div拖拽效果詳解jQuery
- 自定義TabBar動畫效果 - 頁面轉場(Swift)tabBar動畫Swift
- 線上直播原始碼,自定義氣泡效果(BubbleView)原始碼View
- 直播平臺搭建,自定義氣泡效果(BubbleView)View
- 自定義 view 之薄荷 app 的捲尺效果ViewAPP
- 自定義view 之多個引導層動畫效果View動畫
- RecycleView自定義ItemDecoration,實現時間軸效果View
- Android自定義View 雷達掃描效果AndroidView
- 自定義RecyclerView動畫——實現remove飛出效果View動畫REM
- 使用自定義 View 繪製一個懸浮式可拖拽按鈕View
- JavaScript 限定範圍的拖拽效果JavaScript
- JavaScript元素拖拽路徑回放效果JavaScript
- jQuery拖拽的彈出層效果jQuery
- Android SeekBar 自定義thumb,thumb旋轉動畫效果Android動畫
- Android自定義View實現文字輪播效果AndroidView
- 使用BottomSheetBehavior實現美團拖拽效果
- Java 給PPT新增動畫效果(預設動畫/自定義動畫)Java動畫
- Android 自定義View UC下拉重新整理效果(二)AndroidView
- Android 自定義View UC下拉重新整理效果(三)AndroidView
- Android動畫效果之自定義ViewGroup新增布局動畫Android動畫View
- Android 自定義View UC下拉重新整理效果(一)AndroidView
- 自定義View高仿懂球帝我是教練效果View