首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onClickListener for YouTubePlayer

onClickListener for YouTubePlayer
EN

Stack Overflow用户
提问于 2018-12-31 02:19:18
回答 1查看 705关注 0票数 1

我想为onClickListener Player API添加一个YouTube事件--我尝试了许多解决方案,但都没有工作

我的一些尝试

代码语言:javascript
复制
    YouTubePlayerView youTubePlayerView = findViewById(R.id.youtubePlayer);
    youTubePlayerView.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            Log.d(TAG,"onClick");
        }
    });
代码语言:javascript
复制
    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 player视图的上方添加一个布局,并使其透明,然后在此布局中添加一个单击监听器,但每次播放几秒钟后,播放机就会停止。

我的最后一次尝试是使用GestureDetector类,但也没有工作

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-01 17:51:15

我试图在YouTube player视图的上方添加一个布局,并使其透明,然后在此布局中添加一个单击监听器,但播放机在几秒钟后停止。

YouTube Player API不允许上面的任何视图,无论它是可见的还是不可见的,并且将以ErrorReason结束。

它还会消耗任何和所有的触摸事件,而不共享它们。但是,您可以将父OverridedispatchTouchEvent(MotionEvent)方法转换为YouTubePlayerView,并窃取这些触摸事件来启动您自己的onClick()回调。

您需要做的是,首先在xml布局文件中创建一个容器,您可以在其中放置YouTubePlayerView

youtube_player_view_layout.xml

代码语言:javascript
复制
<MyCustomFrameLayout>
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    <YouTubePlayerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </YouTubePlayerView>
</MyCustomFrameLayout>

必须在布局xml中添加带有完全限定名的MyCustomFrameLayout,即使用MyCustomFrameLayout

MyCustomFrameLayout.java

代码语言:javascript
复制
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中进行测试,如果按原样复制,很可能无法正确运行。然而,思想的本质在这里被恰当地投射出来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53983004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档