Как включить событие правого клика и левого клика в андроиде YoutubePlayerView - PullRequest
0 голосов
/ 20 октября 2019

Я использую API данных YouTube для воспроизведения видео YouTube в моем приложении для Android. Я хочу переместить видео вперед на 10 секунд, когда пользователь нажимает справа от youtubePlayerView (как в случае приложения youtube), и аналогично, на 10 секунд назад, когда пользователь щелкает слева от youtubePlayerView. Основной код был показан ниже -

 final YouTubePlayerView youTubePlayerView = findViewById(R.id.video_play_player_id);

    String videoUrl = getIntent().getStringExtra("videoUrl");

    final String videoId = extractYTId(videoUrl);

    youTubePlayerView.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

            youTubePlayer.loadVideo(videoId);
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);

        }

        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

        }
    });

1 Ответ

0 голосов
/ 23 октября 2019

В вашем файле xml layout вы найдете что-то вроде

<com.google.android.youtube.player.YouTubePlayerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ytPlayerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

</com.google.android.youtube.player.YouTubePlayerView>

Оберните его другим пользовательским ViewGroup, например,

<!--
    Make sure to prepend the complete package of the `CustomViewGroup`.
-->
<CustomViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >

    <com.google.android.youtube.player.YouTubePlayerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ytPlayerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </com.google.android.youtube.player.YouTubePlayerView>
</CustomViewGroup>

Определите ваш CustomViewGroup

public class CustomViewGroup extends ViewGroup {

    private boolean actionDownReceived = false;

    private final int DELTA_TOLERANCE = 70;
    private int actionDownX = -1;
    private int actionDownY = -1;

    public CustomViewGroup(Context context)
    {

    }


    public CustomViewGroup(Context context, AttributeSet attrSet)
    {

    }

    public CustomViewGroup(Context context, AttributeSet attrSet, int defStyleAttr)
    {

    }

    //  Now write the appropriate methods to capture touch events.
    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        switch (event.getActionMasked())
        {
            case MotoinEvent.ACTION_DOWN:
                actionDownReceived = true;
                actionDownX = event.getRawX();
                actionDownY = event.getRawY();
                break;

            case MotionEvent.ACTION_MOVE:
                // Check if user moved his finger, there should also be a time check, i.e. if user pressed longer for a click. But I'll let you come up with it.
                if (Math.abs(event.getRawX() - actionDownX) >= DELTA_TOLERANCE) {
                    actionDownReceived = false;
                }
                else if (Math.abs(event.getRawY() - actionDownY) >= DELTA_TOLERANCE) {
                    actionDownReceived = false;
                }
                break;

            case MotionEvent.ACTION_UP:
                if (actionDownReceived) {
                    if (isPressOnLeftSide(event.getRawX(), event.getRawY()) {
                        // Your logic for rewind.
                    }
                    else if (isPressOnRight(event.getRawX(), event.getRawY()) {
                        // Your logic for forward.
                    }
                    actionDownReceived = false;
                }
                break;
            case MotionEven.ACTION_CANCEL: {
                actionDownReceived = false;
                break;
            }
        }
        super.dispatchTouchEvent();
    }
}

Я не проверял код, выполняя его, поэтому могут быть синтаксические ошибки и ошибки компилятора, но, как вы просили о базовой реализации, это должно сработать.

...