猿问
下载APP

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"?>
<RelativeLayout 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=".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>
</RelativeLayout>


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

AntiCheckEmulator
浏览 331回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答