滑动控件起飞的另一种方式

xiaoxiao2021-02-28  35

[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(10001001000100);           super.onFinishInflate();       }          private void init() {           mCallback = new DraggerCallback();           mDraggerHelper = ViewDragHelper.create(this1.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;               //这个地方的含义就是 如果left的值 在leftbound和rightBound之间 那么就返回left               //如果left的值 比 leftbound还要小 那么就说明 超过了左边界 那我们只能返回给他左边界的值               //如果left的值 比rightbound还要大 那么就说明 超过了右边界,那我们只能返回给他右边界的值               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

最新回复(0)