Определите начальную позицию масштабирования / панорамирования с помощью KenBurnsView

Я работаю с библиотекой KenBurnsView и у меня проблема:

В обзоре или в этой симпатичной библиотеке говорится следующее: "Высокая расширяемость: вы можете определить, как будут генерироваться прямоугольники для масштабирования и панорамирования", и это именно то, что я хочу сделать, но я не знаю, как именно.

Я хотел бы быть в состоянии сказать библиотеке увеличивать или панорамировать указанную область (я полагаю, RectF) моего изображения. Я думаю, что мне нужно реализовать собственный TransitionGenerator и написать собственный метод generateNextTransition(), но я не знаю, что делать внутри.

Может кто-нибудь мне помочь?

Благодарю. Адриан

1 ответ

Решение

Вы должны реализовать свой собственный TransitionGenerator и переопределить generateNextTransition() откуда вы должны вернуть Transition объект.

generateNextTransition() метод принимает:

  1. RectF drawableBounds: границы отрисовки, которая установлена ​​в KenBurnsView;

  2. RectF viewport границы KenBurnsView объект.

Transition конструктор принимает:

  1. RectF srcRect: прямоугольник рисованного элемента, который заполнит весь KenBurnsView когда начинается переход (показано ниже):

Эффект Кена Бернса

Иллюстрация из Википедии

  1. RectF dstRect: прямоугольник рисованного элемента, который заполнит весь KenBurnsView когда переход заканчивается;

  2. long duration: продолжительность перехода в миллисекундах.

  3. Interpolator interpolator: экземпляр интерполятора, который будет определять природу движения (может быть AccelerateDecelerateInterpolator, LinearInterpolator, так далее.);

Это может быть хорошая идея, чтобы спасти dstRect использоваться как srcRect в следующем переходе, если вы хотите, чтобы каждый переход начинался с того места, где остановился последний переход. Это именно то, что RandomTransitionGenerator делает. Имейте в виду, что srcRect а также dstRect могут иметь разные размеры (но оба должны быть drawableBounds если вы хотите сохранить изображение на сцене все время). Важно, чтобы оба они имели одинаковое соотношение сторон viewport,

Другие вопросы по тегам