YouTubePlayer的onClickListener

时间:2018-12-31 02:19:19

标签: android android-layout youtube-api onclicklistener android-touch-event

我想为YouTube Player API添加onClickListener事件 我尝试了很多解决方案,但所有解决方案都无效

我的一些尝试

    YouTubePlayerView youTubePlayerView = findViewById(R.id.youtubePlayer);
    youTubePlayerView.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            Log.d(TAG,"onClick");
        }
    });

    YouTubePlayerView youTubePlayerView = findViewById(R.id.youtubePlayer);
    youTubePlayerView.setOnTouchListener(new View.OnTouchListener() 
    {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            Log.d(TAG,"onTouch");
            return false;
        }
    });

此外,我尝试在YouTube播放器视图上方添加一个布局,使其透明,然后向该布局添加一个点击监听器,但播放器每次在几秒钟后就会停止

我最后一次尝试是使用GestureDetector类,但也没有成功

提前谢谢

1 个答案:

答案 0 :(得分:0)

  

我试图在YouTube播放器视图上方添加布局,   透明,然后向此布局添加点击监听器,但播放器   几秒钟后停止

YouTube Player API不允许在其上方显示任何视图,无论它是否可见,都将以ErrorReason关闭。

它也消耗所有触摸事件,而不共享它们。但是,您可以将父级Override dispatchTouchEvent(MotionEvent) 方法ViewGroup移至YouTubePlayerView,然后窃取将这些触摸事件返回给踢自己的onClick()回调。

要做的是,首先在xml布局文件中创建一个放置YouTubePlayerView的容器。

youtube_player_view_layout.xml

<MyCustomFrameLayout>
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    <YouTubePlayerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </YouTubePlayerView>
</MyCustomFrameLayout>

MyCustomFrameLayout必须在布局xml中添加全限定名称,即使用 [my.class.package] + [ClassName]

MyCustomFrameLayout.java

public class MyCustomFrameLayout extends FrameLayout {

    private boolean actionDownReceived = false;
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN: {
                actionDownReceived = true;
                break;
            }

            case MotionEvent.ACTION_MOVE: {
                // No longer a click, probably a gesture.
                actionDownReceived = false;
                break;
            }

            case MotionEvent.ACTION_UP: {
                if (actionDownReceived) {
                    performClick();
                }
                break;
            }
        }
        return super.dispatchTouchEvent(event);
    }
}

然后要做的就是在MyCustomFrameLayout上设置点击监听器。

  

免责声明: 上面的代码未在IDE中进行测试,如果按原样复制,则可能无法正确运行。但是本质   思想的正确投影在这里