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