2013-05-26 8 views
18

Pracuję nad aplikacją, która może działać na Froyo, a także JellyBean. Mam klasy, która rozciąga PageTransformer jak poniżej:Alternatywa dla setAlpha na poziomie api 8

import android.support.v4.view.ViewPager.PageTransformer; 
import android.view.View; 

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) { 
      view.setAlpha(0); 

     } else if (position <= 1) { 
      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); 
      } 


      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 


      view.setAlpha(MIN_ALPHA + 
        (scaleFactor - MIN_SCALE)/
        (1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

     } else { 
      view.setAlpha(0); 
     } 
    } 
} 

Problem polega na tym, metod opisanych w tej klasie dodano API level 11 i mam minimalną wersję SDK API level 8. Poniżej znajdują się te metody, które zostały dodane w poziomie API 11:

  1. setAlpha()
  2. setTranslationX()
  3. setScaleX()
  4. setScaleY()

Co może być rozwiązanie tego problemu?

Odpowiedz

16

Najprostszym rozwiązaniem jest użycie biblioteki NineOldAndroids, która powoduje przeniesienie animacji do wszystkich wersji Androida. The Usage section ma przykłady, w jaki sposób korzystać z biblioteki.

+0

Tak. Kiedy szukałem rozwiązania, znalazłem, większość z nich była polecana dla tego NineOldAndroid. Ale nie rozumiem, jak to wdrożyć. Czy możesz wskazać mi, jak wprowadzić w życie powyższą klasę, którą napisałem. –

+7

@ shree202 - spójrz na [ViewHelper] (https://github.com/JakeWharton/NineOldAndroids/blob/master/library/src/com/nineoldandroids/view/ViewHelper.java) class - wystarczy użyć ViewHelper.setAlpha (widok, alfa) zamiast view.setAlpha (alfa), itp. – ianhanniballake

+0

Ok. Mam to. Dziękuję bardzo za prowadzenie mnie, starszym bracie. Wielkie dzięki. –

51

tak, niektóre rezolucje tutaj:


setAlphaAnimation ... API POZIOM 1

AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
view.startAnimation(alpha); 

setAlpha INT -> Od API poziom 1 -> przestarzałe w 16

Drawable background = localLinLayout.getBackground(); 
background.setAlpha(180); //255 is max (visible) 

setAlpha float -> Poziom API 11+ ->


setImageAlpha -> API POZIOM 16+ (zastosowanie tylko dla ImageViews)

+0

co z innymi osobami takimi jak setScaleX() setScaleY()? –

+0

Myślę, że mówisz o czymś innym ... – cV2

+0

jak zdefiniować w pytaniu –

2

Ponadto, jeśli chcesz korzystanie PageTransformer nawet w wersji 2.2. Musisz zmienić niektóre sprawdzania poprawności, które są wykonane w klasie ViewPager. Sprawdź tę example

+0

+1 Dobry przykład. –

2

się zarówno do przodu i do tyłu, zgodny Używam następujących realizacja moich poglądów:

private void fadeOut(final View view) { 
    int sdk = android.os.Build.VERSION.SDK_INT; 
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     AlphaAnimation alpha = new AlphaAnimation(1f, 0f); 
     alpha.setDuration(mAnimationDuration); 
     alpha.setFillAfter(true); 
     view.startAnimation(alpha); 
    } else { 
     view.animate() 
     .alpha(0f) 
     .setDuration(mAnimationDuration) 
     .setListener(new AnimatorListenerAdapter() { 
      @Override 
      public void onAnimationEnd(Animator animation) { 
       view.setVisibility(View.GONE); 
      } 
     }); 
    } 
} 

private void fadeIn(View view) { 
    int sdk = android.os.Build.VERSION.SDK_INT; 
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     view.setVisibility(View.VISIBLE); 
     AlphaAnimation alpha = new AlphaAnimation(0f, 1f); 
     alpha.setDuration(mAnimationDuration); 
     alpha.setFillAfter(true); 
     view.startAnimation(alpha); 
    } else { 
     view.setAlpha(0f); 
     view.setVisibility(View.VISIBLE); 

     view.animate() 
     .alpha(1f) 
     .setDuration(mAnimationDuration) 
     .setListener(null); 
    } 
} 
+0

+1 Dobry. Dzięki za odpowiedź. –

3

W przypadku gdy ktoś jest kaszel leniwy i chce ZoomOutPageTransformer zgodną z powrotem do API 8. Używa nineoldandroids i klasa ViewHelper.

package com.weddingwire.vendorsearch.Animation; 

import android.support.v4.view.ViewPager; 
import android.view.View; 

import com.nineoldandroids.view.ViewHelper; 

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. 
      ViewHelper.setAlpha(view, 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) { 
       ViewHelper.setTranslationX(view, (horzMargin - vertMargin/2)); 
      } else { 
       ViewHelper.setTranslationX(view, -horzMargin + vertMargin/2); 
      } 

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

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

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

+1 Teraz ten byłby miłą pomocą dla kogoś. –

Powiązane problemy