ViewDragHelper的简单使用
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import androidx.customview.widget.ViewDragHelper;
public class ClientDragLayout extends LinearLayout {
//第一步: 初始化ViewDragHelper对象
private ViewDragHelper viewDragHelper;
public ClientDragLayout(Context context) {
this(context, null);
}
public ClientDragLayout(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public ClientDragLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
ClientDragHelper clientDragHelper = new ClientDragHelper();
viewDragHelper = ViewDragHelper.create(this, clientDragHelper);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return viewDragHelper.shouldInterceptTouchEvent(ev);
}
//第二步: 处理触摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
viewDragHelper.processTouchEvent(event);
return true;
}
}
import android.view.View;
import androidx.annotation.NonNull;
import androidx.customview.widget.ViewDragHelper;
public class ClientDragHelper extends ViewDragHelper.Callback {
//第三部: 处理回调方法
private ViewDragHelper viewDragHelper;
/**
* 是否允许拖动child
* @param view child ViewGroup 的子View
* @param i
* @return true 表示允许拖动 false 表示不允许拖动
*/
@Override
public boolean tryCaptureView(@NonNull View view, int i) {
return true;
}
/**
* 子控件竖直方向位置改变时触发
*/
@Override
public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) {
return left;
}
/**
* 子控件水平方向位置改变时触发
*/
@Override
public int clampViewPositionVertical(@NonNull View child, int top, int dy) {
return top;
}
}
}