- 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;
- //这个地方的含义就是 如果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();
- }
- }
- }