onClickListener для YouTubePlayer - PullRequest
       70

onClickListener для YouTubePlayer

0 голосов
/ 31 декабря 2018

Я хочу добавить событие onClickListener для YouTube Player API. Я перепробовал много разных решений, но все они не сработали

Некоторые из моих попыток

    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 голосов
/ 01 января 2019

Я попытался добавить макет поверх представления проигрывателя 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 и, вероятно, не будет работать правильно, если / когда копируется как есть.Однако суть мысли здесь правильно спроецирована .

...