2013-05-09 110 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; 
     } 
    }} 
}; 

享受!