如何解决使用ViewDragHelper,实现可拖动控件时,控件不能拖动和不能监听问题?
问题一:开始时,我直接使用百度上一些人的代码,结果发现控件根本就不能拖动?
比如:
http://blog.csdn.net/lmj623565791/article/details/46858663
http://www.tuicool.com/articles/UFRNfav
解决方法:
在继承ViewDragHelper.Callback 的类中添加如下代码:
@Override
public int getViewHorizontalDragRange(View child)
{
return getMeasuredWidth()-child.getMeasuredWidth();
}
@Override
public int getViewVerticalDragRange(View child)
{
return getMeasuredHeight()-child.getMeasuredHeight();
}
问题二:如果控件可以拖动了,但是不能监听功能失效?
解决方法:看看onInterceptTouchEvent()是否拦截到触摸事件,看看onTouchEvent()是否`毁拦截到的触摸事件。
@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;
}
/**
* 检查是否可以拦截touch事件
* 如果onInterceptTouchEvent可以return true 则进一步执行onTouchEvent
*/
return mDragHelper.shouldInterceptTouchEvent(ev); //这里一直返回false,结果控件不能拖动
// return true;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
/**
* 处理拦截到的事件 这个方法会在返回前分发事件
*/
mDragHelper.processTouchEvent(ev);
return true;
}