我在那里播放视频的布局,我想处理onClick这个播放器。在我的线性布局中,我在他们的api中建议了youtube的片段:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/youtubePlayerFragment"/>
</LinearLayout>
然后我在我的Activity中访问这个片段:
mYouTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtubePlayerFragment);
我初始化它:
mYouTubePlayerFragment.initialize(CategoriesTabsData.DEVELOPER_KEY, new com.google.android.youtube.player.YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(com.google.android.youtube.player.YouTubePlayer.Provider provider, com.google.android.youtube.player.YouTubePlayer youTubePlayer, boolean b) {
// loading the video
}
@Override
public void onInitializationFailure(com.google.android.youtube.player.YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
我想打印&#34;点击&#34;单击播放器时的Log.d。因此,当播放视频并点击/触摸其播放器时,我想打印&#34;点击&#34;到日志
我试图处理播放器上的点击(我在onInitializationSuccess中获得了youtubeplayer对象),但我没有成功。
我试过了:
mYouTubePlayerFragment.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("youtube", "click");
}
});
但它没有达到onClick。然后我尝试创建MyYouTubePlayerFragment,扩展YouTubePlayerFragment并实现View.OnClickListener,所以我在我的xml中设置了具有相应名称的片段(com.mypackagename.MyYouTubePlayerFragment),并将mYouTubePlayerFragment的类型设置为MyYouTubePlayerFragment但它没有达到的onClick。
我怎样才能抓住&#34;点击视频?
答案 0 :(得分:1)
我认为您应该将YouTubeSupportFragment和add扩展到您的YoutubePlayer(在onInitializationSuccess方法内)YouTubePlayer.PlaybackEventListener。
您可能对onPaused()和onPlaying()方法感兴趣。
示例:
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
youTubePlayer = player;
if (!wasRestored) {
youTubePlayer.setPlaybackEventListener(new YouTubePlayer.PlaybackEventListener() {
@Override
public void onPlaying() {
}
@Override
public void onPaused() {
}
@Override
public void onStopped() {
}
@Override
public void onBuffering(boolean b) {
}
@Override
public void onSeekTo(int i) {
}
});
youTubePlayer.cueVideo(currentVideoID, 0);
}
}
答案 1 :(得分:1)
我遇到类似这样的事情并最终创建了一个封装视图来拦截触摸事件。
也许你可以这样做:
public class YourYouTubePlayerSupportFragment extends YouTubePlayerSupportFragment {
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
YouTubePlayerView youTubePlayerView = (YouTubePlayerView) super.onCreateView(layoutInflater, viewGroup, bundle);
final FrameLayout wrapper = new FrameLayout(getActivity()) {
private GestureDetector gestureDetector;
private GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
//do what you need to here
return super.onSingleTapConfirmed(e);
}
};
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (gestureDetector == null) {
gestureDetector = new GestureDetector(getContext(), gestureListener);
}
return gestureDetector.onTouchEvent(ev);
}
};
FrameLayout.LayoutParams viewLp = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
wrapper.addView(youTubePlayerView, viewLp);
return wrapper;
}
}
答案 2 :(得分:0)
尝试扩展YouTubeSupportFragment
并覆盖onCreateView
方法,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("youtube", "click");
}
});
return view;
}
答案 3 :(得分:0)
因此,要在父视图中侦听单击事件,您应该将click事件从子级传递给父级。在谷歌documentation中,有几种方法可以做到这一点,并且有更高级别视图的辅助方法,如Activity,Fragment,ViewGroup,ViewParent:
您应该注意其他一些方法 不属于View类,但可以直接影响你的方式 能够处理事件。因此,在管理更复杂的事件时 布局,请考虑以下其他方法:
Activity.dispatchTouchEvent(MotionEvent)
- 这允许您的活动 在将所有触摸事件发送到之前拦截它们 窗口。
ViewGroup.onInterceptTouchEvent(MotionEvent)
- 这允许a ViewGroup在调度到子视图时观察事件。
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- 打电话给你 在父视图上指示它不应该拦截触摸 onInterceptTouchEvent(MotionEvent)的事件。