обнаружить двойное нажатие (двойной щелчок) или длинный щелчок в видеопросмотре

Я работаю над приложением для 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;
        }

    });

Но ничего не происходит при долгом щелчке. Длинный щелчок отлично работает для кнопки, но не для просмотра видео. Пожалуйста, помогите мне найти решение. заранее спасибо


person sarath    schedule 09.05.2013    source источник


Ответы (2)


У меня была такая же проблема, вот что я сделал:

Поскольку 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 я переопределил 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. Я только что реализовал таймер, который запускает задачу через 1000 мс, чтобы имитировать длинный щелчок. Вы можете установить желаемую задержку.

Надеюсь, это поможет кому-то!

person Larry Mustaine    schedule 12.08.2013

Более правильный способ: установить слушателя:

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

Наслаждаться!

person Master    schedule 28.05.2014