public class Drag extends LinearLayout {
private ViewDragHelper mDraw;
private Point mPoint = new Point();
public Drag(Context context, AttributeSet attrs) {
super(context, attrs);
mDraw = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback() {
@Override
public boolean tryCaptureView(View child, int pointerId) {
return true;
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx) {
int boundaryLeft = getPaddingLeft();
int boundaryRight = getWidth() - child.getWidth() - getPaddingRight();
left = Math.min(Math.max(left, boundaryLeft), boundaryRight);
return left;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy) {
Log.e("zxc", "top-------->" + top);
//
if (top == 0) {
top = 0;
}
if (top > 300) {
top = 300;
}
//
if (top < 0){
if (top < -300){
top = -300;
}
}
return top;
}
//
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
mDraw.settleCapturedViewAt(0,0);
invalidate();
}
});
}
@Override
public void computeScroll()
{
if(mDraw.continueSettling(true))
{
invalidate();
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return mDraw.shouldInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mDraw.processTouchEvent(event);
return true;
}
}