2013-03-17 13 views
6

Ich arbeite mit ViewPager und Fragmente und jetzt versuche ich eine benutzerdefinierte Animation zu erhalten, die zoom-out page transformation genau zu sein.Benutzerdefinierte Animation für Viewpager

Aber ich bekomme ein paar Fehler. Ich werde die Fehler in den Kommentar mit dem Code-Snippet setzen.

Klasse 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; 
    } 
} 

Klasse 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

Haben Sie die 'ViewPager importiert. PageTransformer-Schnittstelle in der Datei, in der Sie 'ZoomOutPageTransformer' deklarieren? – Luksprog

+0

Das Code-Snippet ist alles, was ich habe, ich habe auch die Verknüpfung 'Strg + Shift + O', um alle richtigen Importe zu bekommen. Also ich denke, ich habe alle notwendigen Importe. – mXX

+0

Haben Sie eine 'import android.support.v4.view.ViewPager.PageTransformer;' in der 'ZoomOutPageTransformer' Datei? Wenn nicht, solltest du es haben. – Luksprog

Antwort

6

Ich habe das Problem gelöst:

  1. Laden Sie die neuesten Android SDK
  2. Durchsuchen, um android-sdk-windows \ Extras \ android \ support \ v4
  3. Copy android-Stütz- v4.jar zu Ihrem Ordner libs in Ihrem Projekt
  4. Reinigen Sie Ihr Projekt
  5. Führen Sie Ihren Code

Dies funktionierte für mich, das Herunterladen der Support-Bibliothek durch ecplise gab mir diese Fehler. Dies behebt das Problem für mich

+0

Danke ,, neueste Android-Support-v4.jsr arbeitete auch für mich – inox

0

Nachdem Sie android Unterstützung v4 Bibliothek aktualisieren, können Sie das Projekt von Eclipse löschen. Und dann importieren Sie das Projekt erneut. Sauber bauen, alles wird gut!

+0

Soll ich mein Projekt löschen? Und was meinst du Update-Support v4-Bibliothek? Und wie mache ich das? – mXX

2

@ MXX ist fast richtig. Aber für diejenigen, die immer noch Probleme haben (wie ich), muss ich einen Punkt zu seiner Vorgehensweise hinzufügen.

Sie müssen Ihr Android Support-Bibliothekspaket aktualisieren. Aber wenn Sie es jetzt haben, müssen Sie es zuerst deinstallieren, dann installieren Sie es erneut, um ein neues zu bekommen.

Wenn Sie IntelliJ IDEA haben:

  1. öffnen SDK-Manager von "Tools/Android/SDK Manager"
  2. Finden Exteras Ordner dann Android Support-Bibliothek überprüfen. Wenn der Status installiert ist, klicken Sie auf "Delete 1 package ...", um es zu löschen.
  3. Überprüfen Sie dieses Paket und klicken Sie auf Installieren.
  4. Navigieren Sie zu \ extras \ android \ support \ v4, kopieren Sie dann android-support-v4.jar und fügen Sie es in Ihren Libs-Ordner ein.
  5. Idee sollte das Projekt automatisch neu kompiliert werden, aber wenn es nicht zu tun haben, die dann sollten Sie es manuell durch einen Klick auf „Build/Rebuild Project“

Das ist es neu kompilieren;)

1

Für noch jemand steckte auf diesem das aktuelle Support v4-Problem, das nicht die v4 ViewPager-Schnittstelle importiert: es erfordert die statische ViewPager-Klasseninstanz nicht. Implementieren Sie einfach PageTransformer. Die PageTransformer-Schnittstelle ist bereits in ViewPager eingebettet.

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

Fügen Sie einfach Kompilierung 'com.android.support:support-v13:23.1.1' zu Abhängigkeiten in build.gradle (Screenshot)

Verwandte Themen