[java]
view plain
copy
public class DragLayout extends RelativeLayout public interface DragViewCallback { void onDragViewClick(); } private View mView; private DraggerCallback mCallback; private ViewDragHelper mDraggerHelper; private DragViewCallback mDragViewCallback; public void setDragViewCallback(DragViewCallback mDragViewCallback) { this.mDragViewCallback = mDragViewCallback; } public DragLayout(Context context) { super(context); init(); } public DragLayout(Context context, AttributeSet attrs) { super(context, attrs); init(); } public DragLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onFinishInflate() { mView = (View) this.findViewById(R.id.iv_customer); mView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mDragViewCallback != null) { mDragViewCallback.onDragViewClick(); } } }); mView.layout(1000, 100, 1000, 100); super.onFinishInflate(); } private void init() { mCallback = new DraggerCallback(); mDraggerHelper = ViewDragHelper.create(this, 1.0f, mCallback); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mDraggerHelper.shouldInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { mDraggerHelper.processTouchEvent(event); return super.onTouchEvent(event); } class DraggerCallback extends ViewDragHelper.Callback { @Override public boolean tryCaptureView(View child, int pointerId) { return true; } @Override public int clampViewPositionHorizontal(View child, int left, int dx) { final int leftBound = getPaddingLeft(); final int rightBound = getWidth() - child.getWidth() - leftBound; return Math.min(Math.max(left, leftBound), rightBound); } @Override public int clampViewPositionVertical(View child, int top, int dy) { final int topBound = getPaddingTop(); final int bottomBound = getHeight() - child.getHeight() - topBound; return Math.min(Math.max(top, topBound), bottomBound); } @Override public int getViewHorizontalDragRange(View child) { return getMeasuredWidth() - child.getMeasuredWidth(); } @Override public int getViewVerticalDragRange(View child) { return getMeasuredHeight() - child.getMeasuredHeight(); } } }
转载请注明原文地址: https://www.6miu.com/read-37189.html