Как добавить режим "картинка в картинке" на Touch Drag Down
Я использую этот проект Github для своего приложения, чтобы воспроизводить видео с помощью YouTube API. У меня есть следующий код onInitializationSuccess
способ..
@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {
this.player = player;
player.setPlayerStateChangeListener(playerStateChangeListener);
player.setPlaybackEventListener(playbackEventListener);
if (!wasRestored) {
player.cueVideo("I0D-fkypQQw");
}
}
Я закодировал это YouTubePlayerView
играть в режиме PIP следующим образом:
enter_pip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent i = new Intent(getBaseContext(), PipActivity.class);
// startActivity(i);
if (android.os.Build.VERSION.SDK_INT >= 26) {
//Trigger PiP mode
try {
Rational rational = new Rational(youTubeView.getWidth(), youTubeView.getHeight());
PictureInPictureParams mParams =
new PictureInPictureParams.Builder()
.setAspectRatio(rational)
.build();
enterPictureInPictureMode(mParams);
} catch (IllegalStateException e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "API 26 needed to perform PiP", Toast.LENGTH_SHORT).show();
}
}
});
}
Видео успешно входит в режим PIP, но проблема в том, что видео останавливается после входа в режим PIP, я хочу, чтобы оно продолжалось с того места, где оно было, когда оно не в режиме PIP.
Пожалуйста, помогите мне добавить режим "картинка в картинке", в котором изображение в режиме изображения должно продолжаться, а не останавливаться. Я ищу YouTube, например, PIP, в котором видео воспроизводится внизу с кнопками "Воспроизведение / Пауза" и "Закрыть". это верно..
Я ищу ПИП как на этом изображении
1 ответ
Просмотрите эту ссылку GitHub, которая полностью соответствует вашим критериям видео DragDown...
Чтобы подвести итог проекта GitHub... используйте goMin()
код метода..в классе YouTuDraggingView, как показано ниже:
public void goMin(final boolean isDismissToMin) {
nowStateScale = MIN_RATIO_HEIGHT;
final float fullTop = Math.abs(mBackgroundViewWrapper.getMarginTop() - mRangeScrollY);
ValueAnimator valueAnimator = ValueAnimator.ofFloat(mBackgroundViewWrapper.getMarginTop(), mRangeScrollY);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
mBackgroundView.setAlpha(isDismissToMin ? (value / fullTop) : 1);
updateVideoView((int) value);
if (value == mRangeScrollY) {
ViewGroup.LayoutParams p = getLayoutParams();
p.width = -2;
p.height = -2;
setLayoutParams(p);
mCallback.status(STATUS_MIN);
}
}
});
valueAnimator.setDuration((long) (Math.abs((1 - mBackgroundViewWrapper.getMarginTop() / mRangeScrollY)) * rangeDuration)).start();
}
и goMax(), чтобы полностью изменить...
public void goMax() {
if (nowStateScale == MIN_RATIO_HEIGHT) {
ViewGroup.LayoutParams params = getLayoutParams();
params.width = -1;
params.height = -1;
setLayoutParams(params);
}
ValueAnimator valueAnimator = ValueAnimator.ofFloat(mBackgroundViewWrapper.getMarginTop(), 0);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
updateVideoView((int) value);
if (value == 0) {
if (isLandscape()) {
goFullScreen();
}
mCallback.status(STATUS_MAX);
}
}
});
valueAnimator.setDuration((long) (mBackgroundViewWrapper.getMarginTop() / mRangeScrollY * rangeDuration)).start();
nowStateScale = 1.0f;
}
Надеюсь, что это поможет вам...