1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| package com.keqiang.highcloud.ui.widget; import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.ImageView;
@SuppressLint("AppCompatCustomView") public class DragView extends ImageView { private int width; private int height; private int screenWidth; private int screenHeight; private Context context; private boolean dragEnable = true; private boolean isDrag = false; public boolean isDrag() { return isDrag; } public boolean isDragEnable() { return dragEnable; } public void setDragEnable(boolean dragEnable) { this.dragEnable = dragEnable; } public DragView(Context context, AttributeSet attrs) { super(context, attrs); dragEnable = true; this.context = context; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); } private float downX; private float downY; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); if (this.isEnabled()) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isDrag = false; ViewGroup mViewGroup = (ViewGroup) getParent(); if (null != mViewGroup) { screenWidth = mViewGroup.getWidth(); screenHeight = mViewGroup.getHeight(); } downX = event.getX(); downY = event.getY(); break; case MotionEvent.ACTION_MOVE: Log.e("kid", "ACTION_MOVE"); if (dragEnable) { final float xDistance = event.getX() - downX; final float yDistance = event.getY() - downY; int l, r, t, b; if (Math.abs(xDistance) > 10 || Math.abs(yDistance) > 10) { Log.e("kid", "Drag"); isDrag = true; l = (int) (getLeft() + xDistance); r = l + width; t = (int) (getTop() + yDistance); b = t + height; if (l < 0) { l = 0; r = l + width; } else if (r > screenWidth) { r = screenWidth; l = r - width; } if (t < 0) { t = 0; b = t + height; } else if (b > screenHeight) { b = screenHeight; t = b - height; }
this.layout(l, t, r, b); } } break; case MotionEvent.ACTION_UP: setPressed(false); break; case MotionEvent.ACTION_CANCEL: setPressed(false); break; } return true; } return false; } }
|