使用onDragListener更改Videoview的位置

时间:2013-12-17 09:42:18

标签: android android-view android-videoview

我正在使用VideoView播放视频。我想在将其从原始位置拖动到新位置时更改其位置。我使用了以下代码:

video_view.setOnDragListener(new OnDragListener() {

        @Override
        public boolean onDrag(View v, DragEvent event) {
            // TODO Auto-generated method stub
            switch(event.getAction())
            {
                case DragEvent.ACTION_DRAG_ENTERED:
                    break;

                case DragEvent.ACTION_DRAG_STARTED:
                    return true;

                case DragEvent.ACTION_DRAG_LOCATION:
                    return true;

                case DragEvent.ACTION_DROP:
                    float x=event.getX();
                    float y=event.getY();

                    int top=(int)x+height;
                    int bottom=(int)y+height;
                    int left=(int)x+width;
                    int right=(int)y+width;

                    video_view.layout(left, top, right, bottom);
                    v.invalidate();

和xml是

<VideoView 
android:id="@+id/video"
android:layout_height="100dp"
android:layout_width="100dp"/>

在上面的代码中,video_view是我videoview的对象。但是当我试图拖动它时,什么都没有改变,所以我做错了什么?或者我需要使用FrameLayout因为我在这里使用相对布局吗?

与此同时,我对DragEvent.ACTION_DRAG_ENTEREDDragEvent.ACTION_DRAG_STARTED

之间的差异几乎一无所知

DragEvent.ACTION_DRAG_EXITEDDragEvent.ACTION_DRAG_ENDED ..谢谢!!

2 个答案:

答案 0 :(得分:2)

您必须在视图中开始执行startDrag方法的拖动过程:

video_view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                ClipData data = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
                view.startDrag(data, shadowBuilder, view, 0);
                return false;
            }
            return true;
        }
    });

答案 1 :(得分:0)

您将代码更改为以下代码,此代码适用于我。 :d

video_view.getRootView().setOnDragListener(new OnDragListener() {..your code..}