2013-05-09 111 views
2

我正在使用Android應用程序。在我的應用程序中,我必須在屏幕的角落顯示視頻。然後,如果用戶雙擊或長按,我必須將視頻展開爲全屏。 所以我用下面的代碼。檢測雙擊(雙擊)或長時間點擊視頻查看

vd.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 




      if (!flag) { 
       DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); 
       android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) vd.getLayoutParams(); 
       params.width = metrics.widthPixels; 
       params.height = metrics.heightPixels; 
       params.leftMargin = 0; 
       vd.setLayoutParams(params); 
       flag=true; 

      } 
      else{ 

       DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); 
       android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) vd.getLayoutParams(); 
       params.width = (int) (200); 
       params.height = (int) (200); 
       params.leftMargin = 30; 
       vd.setLayoutParams(params); 
       flag = false; 

      } 
      return true; 
     } 

    }); 

但是沒有發生什麼事長按click.Long點擊工作正常的按鈕,但不適用於Videoview。請幫我找到一個解決方案。 在此先感謝

回答

0

我有同樣的問題,這是我做的:

由於setOnClickListener或setOnLongClickListener沒有被觸發,我創建了自己的類,它擴展VideoView

public class VideoViewCustom extends VideoView{ 

和使用這個類是和XML對象

<com.your.proyect.VideoViewCustom 
    android:id="@+id/my_custom_videoview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

我VideoViewCustom類,我overrided了的onTouchEvent

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

    if(ev.getAction() == MotionEvent.ACTION_DOWN && longClickTimer == null) 
    { 
     Log.d(TAG, "ACTION_DOWN"); 
     longClickTimer = new Timer(); 
     longClickTimer.schedule(new longClickTask(), DELAY_TIME,PERIOD_TIME); 
    } 
    else if(ev.getAction() == MotionEvent.ACTION_UP) 
    { 
     Log.d(TAG, "ACTION_UP"); 

     if(longClickTimer != null) 
     { 
      longClickTimer.cancel(); 
      longClickTimer.purge(); 
      longClickTimer = null; 
     } 
    } 

    return true; 
} 

class longClickTask extends TimerTask { 

    @Override 
    public void run() { 
     Log.d(TAG, "Long Click"); 
     longClickTimer.cancel(); 
     longClickTimer.purge(); 
     longClickTimer = null; 

     //IMPLEMENT YOUR LONG CLICK TASK HERE 
    } 

};

現在可以知道何時點擊了VideoView。我只是實現了一個計時器,它會在1000ms後觸發一個任務來模擬長按。你可以設置你想要的延遲。

希望這可以幫助別人!

0

更正確的做法: 集偵聽器:

videoView.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     if(event.getAction() == MotionEvent.ACTION_DOWN && longClickTimer == null) 
     { 
      if (mc.isShowing()) {mc.hide();} else { 
       mc.show(10000);} 
      longClickTimer = new Timer(); 
      longClickTimer.schedule(new longClickTask(), 3000); 
     } 
     else 
     { 
      if(longClickTimer != null) 
      { 
       longClickTimer.cancel(); 
       longClickTimer.purge(); 
       longClickTimer = null; 
      } 
     } 
     return true; 
    }}); 

任務定時器:

class longClickTask extends TimerTask { 
    @Override 
    public void run() { 

     if(longClickTimer != null) 
     { 
      longClickTimer.cancel(); 
      longClickTimer.purge(); 
      longClickTimer = null; 
     } 
     getActivity().runOnUiThread(Runnable1); 
    }} 

和運行的全屏幕:

final Runnable Runnable1 = new Runnable() { 
    public void run() { 
     int orien = getResources().getConfiguration().orientation; 
     if ((orien==Configuration.ORIENTATION_LANDSCAPE) && (frag==0)) { 
     if (fullscr==false) { 
     wind.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
     wind.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     DisplayMetrics metrics = new DisplayMetrics(); wind.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoView.getLayoutParams(); 
     heightvid=params.height; 
     params.width = metrics.widthPixels; 
     params.height = metrics.heightPixels; 
     frame1.setBackgroundColor(Color.BLACK); 

     videoView.setLayoutParams(params); 
     fullscr=true;} 
     else if ((orien==Configuration.ORIENTATION_LANDSCAPE) && (frag==0)) { 
      wind.setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
      DisplayMetrics metrics = new DisplayMetrics(); wind.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
      android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoView.getLayoutParams(); 
      params.width = WindowManager.LayoutParams.FILL_PARENT; 
      params.height = heightvid; 
      frame1.setBackgroundColor(Color.WHITE); 

      videoView.setLayoutParams(params); 
      fullscr=false; 
     } 
    }} 
}; 

享受!