web-dev-qa-db-ja.com

Android:VideoViewにonClickListenerを指定できないのはなぜですか?

次のコード行を作成しました。

 mVideoView = (VideoView) findViewById(R.id.video_view);
    mVideoView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("LOG_TAG, click");
        }
    });

ただし、アプリケーションを実行すると、クリックイベントは呼び出されません。

VideoViewでOnClickListenerを登録することは不可能ですか?そして、もしそうなら、なぜそうなのですか?

59
Fabian

videoViewで機能するVideoView.setOnTouchListener(..)を使用します

80
newdev

OnTouchを使用してVideoViewの一時停止/再生を解決した方法は次のとおりです。

// Class variables
private boolean bVideoIsBeingTouched = false;
private Handler mHandler = new Handler();

vvVideo.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    if (!bVideoIsBeingTouched) {
        bVideoIsBeingTouched = true;
    if (vvVideo.isPlaying()) {
        vvVideo.pause();
    } else {
        vvVideo.resume();
    }
    mHandler.postDelayed(new Runnable() {
        public void run() {
            bVideoIsBeingTouched = false;
        }
        }, 100);
    }
    return true;
    }
});
16
Dan

私はこれが古い質問であることを知っていますが、私がやったことは次のとおりです:

SetOnClickListenerはトリガーされないため、VideoViewを拡張する独自のクラスを作成しました

public class VideoViewCustom extends VideoView{

onTouchEventをオーバーライドしました

@Override
public boolean onTouchEvent(MotionEvent ev) {

    if(ev.getAction() == MotionEvent.ACTION_DOWN){
        Log.d(TAG, "ACTION_DOWN");
    }

    return super.onTouchEvent(ev);
}

そして今、私はMotionEventでonClickイベントを取得することができます。

これが誰かを助けることを願っています!

14
Larry Mustaine

私はこれが古いことを知っていますが、私はこれを使用しました:

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

            Log.i(TAG, "Video 1 clicked, starting playback");

            return false;
        }
    });
14
nawlrus

同様の問題に直面するかもしれない人々へのいくらかの助けにもかかわらず、これはおそらく長い間延期されます。この問題を回避する方法は、透明な画像ビューをビデオビューのすぐ上に置き、画像ビューでonClickイベントをリッスンし、その後ビデオビューでやりたいことをすることでした。

2
Michael M

これは古い質問であることに気づきましたが、簡単な回避策があります。私は答えられませんなぜこれは機能しません-私の意見では大きな見落としのようです。ただし、簡単な回避策は、VideoViewをFrameLayout内の唯一のビューとして配置し、レイアウトにOnClickListenerを設定することです。理想的ではありませんが、機能します。

2
mszaro

ビデオの特定の部分をタッチして何かをしたい場合は、ビデオビューで透明なボタンを使用できます。

1
Mouna

VideoViewは、mdeiaplayerとsurfaceViewを含むラッパーです。 MediaControllerを介して対話するか、独自のSurfaceViewを記述して、onClickイベントを実装できます。

0
nahwarang

ジェスチャーオーバーレイビュー

タッチイベントを取得するには、このビューを別のビューの上にオーバーレイできる必要があります。

お役に立てれば!

0
Codeman