package com.tekinarslan.material.sample.customgroupview; import android.content.Context; import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.Toast; import com.apkfuns.logutils.LogUtils; /** * Created by cdj on 2015/10/20. */ public class ViewDragHelperViewGroupDemo extends LinearLayout { private ViewDragHelper mDragHelper; private View mDragView; private View mAutoBackView; private View mEdgeTrackerView; public ViewDragHelperViewGroupDemo(Context context) { super(context); } public ViewDragHelperViewGroupDemo(Context context, AttributeSet attrs) { super(context, attrs); mDragHelper = ViewDragHelper.create(this, 1.0f, new DragHelperCallback()); mDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); } public ViewDragHelperViewGroupDemo(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // final int action = MotionEventCompat.getActionMasked(ev); // if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { // mDragHelper.cancel(); // return false; // } return mDragHelper.shouldInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { // LogUtils.d("ontouch"); mDragHelper.processTouchEvent(ev); return true; } @Override protected void onFinishInflate() { super.onFinishInflate(); mEdgeTrackerView = getChildAt(2); } private class DragHelperCallback extends ViewDragHelper.Callback { @Override public boolean tryCaptureView(View child, int pointerId) { LogUtils.d("tryCaptureView..."+"childView="+child+" pointerId"+pointerId); return child == mDragView || child == mAutoBackView; } @Override public void onEdgeTouched(int edgeFlags, int pointerId) { super.onEdgeTouched(edgeFlags, pointerId); Toast.makeText(getContext(), "edgeTouched", Toast.LENGTH_SHORT).show(); LogUtils.d("onEdgeTouched......" + " edgeFlags=" + edgeFlags + " pointerId=" + pointerId); mDragHelper.captureChildView(mEdgeTrackerView, pointerId); } @Override public int clampViewPositionHorizontal(View child, int left, int dx) { return left; // final int leftBound = getPaddingLeft(); // final int rightBound = getWidth() - mDragView.getWidth() - leftBound; // final int newLeft = Math.min(Math.max(left, leftBound), rightBound); // return newLeft; } @Override public int clampViewPositionVertical(View child, int top, int dy) { LogUtils.d("childView="+child+" top="+top+" dy="+dy); return top; } } }