次のコード行を作成しました。
mVideoView = (VideoView) findViewById(R.id.video_view);
mVideoView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v("LOG_TAG, click");
}
});
ただし、アプリケーションを実行すると、クリックイベントは呼び出されません。
VideoViewでOnClickListenerを登録することは不可能ですか?そして、もしそうなら、なぜそうなのですか?
videoViewで機能するVideoView.setOnTouchListener(..)
を使用します
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;
}
});
私はこれが古い質問であることを知っていますが、私がやったことは次のとおりです:
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イベントを取得することができます。
これが誰かを助けることを願っています!
私はこれが古いことを知っていますが、私はこれを使用しました:
mVideoView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "Video 1 clicked, starting playback");
return false;
}
});
同様の問題に直面するかもしれない人々へのいくらかの助けにもかかわらず、これはおそらく長い間延期されます。この問題を回避する方法は、透明な画像ビューをビデオビューのすぐ上に置き、画像ビューでonClickイベントをリッスンし、その後ビデオビューでやりたいことをすることでした。
これは古い質問であることに気づきましたが、簡単な回避策があります。私は答えられませんなぜこれは機能しません-私の意見では大きな見落としのようです。ただし、簡単な回避策は、VideoViewをFrameLayout内の唯一のビューとして配置し、レイアウトにOnClickListenerを設定することです。理想的ではありませんが、機能します。
ビデオの特定の部分をタッチして何かをしたい場合は、ビデオビューで透明なボタンを使用できます。
VideoViewは、mdeiaplayerとsurfaceViewを含むラッパーです。 MediaControllerを介して対話するか、独自のSurfaceViewを記述して、onClickイベントを実装できます。