可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have written these lines of code:
mVideoView = (VideoView) findViewById(R.id.video_view);
mVideoView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v("LOG_TAG, click");
}
});
However, when I run my application, the click event is never called.
So I wonder, is it impossible to register an OnClickListener on a VideoView? And, if so, why is that the case?
回答1:
use VideoView.setOnTouchListener(..)
it works for VideoView
回答2:
Here's how I solved the pause/play of VideoViews using onTouch:
// 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;
}
});
回答3:
I know this is and old question, but here is what I did:
Since setOnClickListener is not been triggered, I created my own class which extends VideoView
public class VideoViewCustom extends VideoView{
and Overrided the onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN){
Log.d(TAG, "ACTION_DOWN");
}
return super.onTouchEvent(ev);
}
and now I can get the onClick event with the MotionEvent.
Hope this helps someone!
回答4:
I know this is old but I used this:
mVideoView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "Video 1 clicked, starting playback");
return false;
}
});
回答5:
This is probably long overdue, nonetheless of some help to those who may run into a similar problem. The way I got around this problem was by laying a transparent image view right on top of the video view, then listening to onClick events on the image view, and doing whatever it was I wanted to do with the video view afterwards.
回答6:
I realize this is an old question but thought I'd chime in with an easy workaround. I can't answer why this doesn't work - seems like a big oversight in my opinion. But an easy workaround is to place your VideoView as the sole View inside a FrameLayout, and set an OnClickListener on the layout. Not ideal, but it works.
回答7:
You can well use a button which is transparent on the video view if you want a specific part of the video on touch to do something.
回答8:
The VideoView is a wrapper containing mdeiaplayer and surfaceView. You can interact with through MediaController or writing your own SurfaceView and implement onClick events.
回答9:
You might try Gesture Overlay View
You should be able to overlay this view on top of another view in order to get touch events.
Hope this helps!
回答10:
It is possible I have did this with onSetClickListener. And Here's a code for your help:
mVideoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Here you put a condition for playing a video when you click on your video view.//
if(my_video.isPressed())
{
my_video.start();
} else {
Toast.makeText(getApplicationContext(),
"Not able to run This Video!",
Toast.LENGTH_LONG).show();
}
}
});