Пользовательская анимация путем переопределения метода transformPage (вид просмотра, плавающая позиция) класса PageTransformer View Pager

#android #animation #android-viewpager #android-pagetransformer

#Android #Анимация #android-viewpager #android-pagetransformer

Вопрос:

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

Я создаю анимацию с переопределением метода transformPage (вид просмотра, плавающая позиция) класса PageTransformer в view pager


  private final PageTransformer mPageTransformer2 = new PageTransformer() {
    @Override
    public void transformPage(View view, float position) {
        Log.d("CalViewPager", "transformPage: "   position );

        if (position < 0.0f ) {
            // Pin the left page to the left side.
            view.setTranslationX(getWidth() * -position);
            view.setAlpha(Math.max(1.0f - position, 0.0f));
        } else{
            // Use the default slide transition when moving to the next page.
            view.setTranslationX(0.0f);
            view.setAlpha(1.0f);
        }


    };
  

Приведенный выше код отлично работает с правой стороны, и я пытаюсь сделать это и с левой стороны. Итак, я пытаюсь понять значение позиции метода transform (вид просмотра, плавающая позиция). но я не могу понять, как это меняется с view?

Что я обнаружил, если я поменяю местами правую сторону, каждое значение позиции увеличится на 1, а если в левой части, то оно уменьшится на 1. но как я узнаю, какой вид имеет значение позиции?

Примечание: — пожалуйста, прокомментируйте, если вы не получили мой вопрос или вам нужно больше объяснений

Ответ №1:

Вы должны использовать следующий код :

 public void transformPage(View page, float position) {
       final float normalizedposition = Math.abs(Math.abs(position) - 1);
       page.setScaleX(normalizedposition / 2   0.5f);
       page.setScaleY(normalizedposition / 2   0.5f);
  

}

Например, посетите этот веб-сайт, пример cardpager yazdani