Frobisher. 2019-02-28 15:52 采纳率: 0%
浏览 266

ViewDragHelper自定义ViewGroup中shouldInterceptTouchEvent一直返回false是怎么回事?

最近再项目里使用ViewDragHelper自定义了一个ViewGroup,但是在自定义ViewGroup中的view却无法被拖动,ViewGroup中重写的onInterceptTouchEvent中调用的shouldInterceptTouchEvent也一直返回false,参照着很多博客和教程重新把ViewGroup写了很多次,没有成功过,把onInterceptTouchEvent返回值直接改为true布局中的view就可以拖动,请问怎么样才能正常使用ViewDragHelper呢?

自定义ViewGroup:

public class DragLayout extends LinearLayout {
private ViewDragHelper dragHelper;

public DragLayout(Context context) {
    super(context);
    init();
}

public DragLayout(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    init();
}

public DragLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

public void init(){
    dragHelper=ViewDragHelper.create(this,1.0f,new ViewDragCallback());
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    Log.d("debuginfo","onInterceptTouchEvent返回值为:"+dragHelper.shouldInterceptTouchEvent(ev));
    Log.d("debuginfo","onInterceptTouchEvent中的ev包含:"+ev.toString());
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    dragHelper.processTouchEvent(event);
    return true;
}

class ViewDragCallback extends ViewDragHelper.Callback{

    @Override
    public boolean tryCaptureView(View child, int pointerId) {
        Log.d("debuginfo","tryCaptureView中childView的ID为:"+child.getId());
        Log.d("debuginfo","tryCaptureView中pointerId为:"+pointerId);
        return true;
    }

    @Override
    public int clampViewPositionHorizontal(View child, int left, int dx) {
        Log.d("debuginfo","clampViewPositionHorizontal方法返回的left值为:"+left);
        return left;
    }

    @Override
    public int clampViewPositionVertical(View child, int top, int dy) {
        return top;
    }
}

}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
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=".DragActivity">

<com.lfy.freefly.View.DragLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageButton
        android:id="@+id/controller"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/roundbutton"
        android:src="@drawable/ic_home" />
</com.lfy.freefly.View.DragLayout>

ViewGroup中的onInterceptTouchEvent中的event中的值有:
MotionEvent {
action=ACTION_DOWN,
id[0]=0, x[0]=30.0, y[0]=41.0,
toolType[0]=TOOL_TYPE_FINGER,
buttonState=0,
metaState=0,
flags=0x0,
edgeFlags=0x0,
pointerCount=1,
historySize=0,
eventTime=1866812,
downTime=1866812,
deviceId=2,
source=0x1002 }

有没有大佬能帮忙解决一下,感激不尽

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 oracle集群安装出bug
    • ¥15 关于#python#的问题:自动化测试
    • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
    • ¥15 教务系统账号被盗号如何追溯设备
    • ¥20 delta降尺度方法,未来数据怎么降尺度
    • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
    • ¥15 再不同版本的系统上,TCP传输速度不一致
    • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
    • ¥15 DIFY API Endpoint 问题。
    • ¥20 sub地址DHCP问题