2013-12-17 28 views
2

我正在使用VideoView來播放視頻。當我將其從原始位置拖到新位置時,我想更改其位置。我用下面的代碼:通過使用onDragListener更改視頻的位置

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之間..謝謝!!

+0

你可以找到關於此拖動事件信息[拖放(http://developer.android.com/guide/topics/ui/drag-drop.html#AboutDragEvent) – AndreyNik

回答

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; 
     } 
    }); 
0

你改變你的代碼下面的代碼,我這個代碼工作。 :d

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