YouTubePlayer - 如何处理点击监听器?

时间:2018-01-13 14:51:50

标签: android android-fragments youtube-api youtube-data-api

我在那里播放视频的布局,我想处理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;点击视频?

4 个答案:

答案 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)的事件。