2013-03-17 4 views
6

Я работаю с viewPager и фрагментами, и теперь я пытаюсь получить настраиваемую анимацию, точно zoom-out page transformation.Пользовательская анимация для viewpager

Но я получаю несколько ошибок. Я поставлю ошибки в комментарии с помощью фрагмента кода.

класса MainActivity

import android.support.v4.app.FragmentManager; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.Menu; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */ 
     ViewPager pager = (ViewPager) findViewById(R.id.pager); 

     /** Getting fragment manager */ 
     FragmentManager fm = getSupportFragmentManager(); 

     /** Instantiating FragmentPagerAdapter */ 
     MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); 

     /** Setting the pagerAdapter to the pager object */ 
     pager.setAdapter(pagerAdapter); 

     // **ERROR:The method setPageTransformer(boolean, ViewPager.PageTransformer) in the type ViewPager is not applicable for the arguments (boolean, ZoomOutPageTransformer)** 
     pager.setPageTransformer(true, new ZoomOutPageTransformer()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

Класс ZoomOutPageTransformer

import android.view.View; 
    // **ERROR on 'ViewPager.PageTransformer --> ViewPager cannot be resolved to a type ** 
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer { 
     private static float MIN_SCALE = 0.85f; 
     private static float MIN_ALPHA = 0.5f; 

     public void transformPage(View view, float position) { 
      int pageWidth = view.getWidth(); 
      int pageHeight = view.getHeight(); 

      if (position < -1) { // [-Infinity,-1) 
       // This page is way off-screen to the left. 
       view.setAlpha(0); 

      } else if (position <= 1) { // [-1,1] 
       // Modify the default slide transition to shrink the page as well 
       float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
       float vertMargin = pageHeight * (1 - scaleFactor)/2; 
       float horzMargin = pageWidth * (1 - scaleFactor)/2; 
       if (position < 0) { 
        view.setTranslationX(horzMargin - vertMargin/2); 
       } else { 
        view.setTranslationX(-horzMargin + vertMargin/2); 
       } 

       // Scale the page down (between MIN_SCALE and 1) 
       view.setScaleX(scaleFactor); 
       view.setScaleY(scaleFactor); 

       // Fade the page relative to its size. 
       view.setAlpha(MIN_ALPHA + 
         (scaleFactor - MIN_SCALE)/
         (1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

      } else { // (1,+Infinity] 
       // This page is way off-screen to the right. 
       view.setAlpha(0); 
      } 
     } 
    } 
+0

ли Вы, импортировали 'ViewPager. Интерфейс PageTransformer' в файле, где вы объявляете 'ZoomOutPageTransformer'? – Luksprog

+0

Фрагмент кода - это все, что у меня есть, я также сделал ярлык «ctrl + shift + o», чтобы получить правильный импорт. Поэтому я думаю, что у меня есть все необходимые импорты. – mXX

+0

У вас есть 'import android.support.v4.view.ViewPager.PageTransformer;' в файле 'ZoomOutPageTransformer'? Если нет, вы должны иметь это. – Luksprog

ответ

6

Я решил эту проблему:

  1. Скачать последние Android SDK
  2. Просмотр в андроид-СДК-окна \ Extras \ Android \ поддержка \ v4
  3. Copy андроид-support- v4.jar в вашу папку с libs в вашем проекте
  4. Очистить свой проект
  5. Заполните свой код

Это работало для меня, загрузка библиотеки поддержки через ecplise дала мне эти ошибки. Это поставило проблему для меня

+0

Спасибо, последняя версия android-support-v4.jsr тоже работала для меня – inox

0

После обновления андроида библиотеки поддержки v4, вы можете удалить проект из затмения. И затем снова импортируйте проект. Сделайте чистую сборку, все будет в порядке!

+0

Должен ли я удалить свой проект? И что вы подразумеваете в поддержке библиотеки поддержки v4? И как мне это сделать? – mXX

2

@mXX почти прав. Но для тех, у кого еще есть проблемы (например, я), мне нужно добавить пункт к его процедуре.

Вам необходимо обновить пакет поддержки Android-поддержки. Но если у вас есть это сейчас, вам нужно сначала удалить его, а затем установить его снова, чтобы получить новый.

Если у вас есть IntellijIdea:

  1. окно Диспетчер Open SDK от "Инструменты/Android/SDK Manager"
  2. Найти папку Exteras затем проверить библиотеку Android поддержки. Если его статус установлен, нажмите «Удалить 1 пакет ...», чтобы удалить его.
  3. Проверьте этот пакет и нажмите кнопку «Установить».
  4. Перейдите к \ extras \ android \ support \ v4, затем скопируйте android-support-v4.jar и вставьте его в папку Libs.
  5. Идея должна перекомпилировать проект автоматически, однако, если он не делал , что тогда вы должны перекомпилировать его вручную, нажав на «Build/Rebuild Project»

Вот оно;)

1

Для кто-то все еще застрял в этой текущей версии v4, не импортируя интерфейс v4 ViewPager: для него не требуется статический экземпляр класса ViewPager. Просто реализуйте PageTransformer. Интерфейс PageTransformer уже заключен внутри с ViewPager.

public class ZoomOutPageTransformer implements PageTransformer { 

    private static float MIN_SCALE = 0.85f; 
    private static float MIN_ALPHA = 0.5f; 

    public void transformPage(View view, float position) { 
     int pageWidth = view.getWidth(); 
     int pageHeight = view.getHeight(); 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 1) { // [-1,1] 
      // Modify the default slide transition to shrink the page as well 
      float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
      float vertMargin = pageHeight * (1 - scaleFactor)/2; 
      float horzMargin = pageWidth * (1 - scaleFactor)/2; 
      if (position < 0) { 
       view.setTranslationX(horzMargin - vertMargin/2); 
      } else { 
       view.setTranslationX(-horzMargin + vertMargin/2); 
      } 

      // Scale the page down (between MIN_SCALE and 1) 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

      // Fade the page relative to its size. 
      view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) 
        /(1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 
0

Просто добавьте компиляции 'com.android.support:support-v13:23.1.1' к зависимости в build.gradle (Screenshot)

Смежные вопросы