ViewDragHelper基本介绍
ViewDragHelper主要用于让布局中的对象能够拖拽。
主要使用方法:
1.将布局中的事件拦截和事件处理交给ViewDragHelper对象。
@Override
public boolean onTouchEvent(MotionEvent event) {
mDragHelper.processTouchEvent(event);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return mDragHelper.shouldInterceptTouchEvent(ev);
}
经过上述操作,就能让ViewDragHelper获得对象做处理。
ViewDragHelper对布局中控件的控制主要由回调函数决定:
private void initView() {
mDragHelper = ViewDragHelper.create(this, new ViewDragHelper.Callback() {
@Override
public boolean tryCaptureView(View child, int pointerId) {
return true;
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx) {
return left;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy) {
return top;
}
});
}
第一个回调函数中,tryCaptureView负责使哪个子控件可以被拖拽
第二个函数负责控件的左右边界,其中left是子控件当前的位置,如果要修改其位置不能被拖拽出界面,则当left出界面时,返回一个界面内的值即可。
第三个函件负责控制控件的上下边值,当控制子控件位置时,就返回其他值
完整代码如下:
public class ViewDragLayout extends RelativeLayout {
private ViewDragHelper mDragHelper;
public ViewDragLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
mDragHelper = ViewDragHelper.create(this, new ViewDragHelper.Callback() {
@Override
public boolean tryCaptureView(View child, int pointerId) {
return true;
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx) {
return left;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy) {
return top;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mDragHelper.processTouchEvent(event);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return mDragHelper.shouldInterceptTouchEvent(ev);
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<com.example.xin.viewdraghelperdemo.ViewDragLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.xin.viewdraghelperdemo.MainActivity">
<TextView
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#33556688"
android:text="drag1!"
android:gravity="center" />
<TextView
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#33685142"
android:text="drag2!"
android:gravity="center" />
<TextView
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#33881166"
android:text="drag3"
android:gravity="center" />
</com.example.xin.viewdraghelperdemo.ViewDragLayout>
效果图: