Альтернатива setAlpha в api уровне 8

Я работаю над приложением, которое может работать на Froyo а также на JellyBean . У меня есть класс, который расширяет PageTransformer, как показано ниже:

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

Проблема заключается в том, что методы, написанные в этом классе, были добавлены в API level 11 и у меня есть минимальная версия API level 8 . Ниже перечислены те методы, которые были добавлены в уровне API 11:

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

Каким может быть решение этой проблемы?

Solutions Collecting From Web of "Альтернатива setAlpha в api уровне 8"

Самое простое решение – использовать библиотеку NineOldAndroids , которая поддерживает анимацию во всех версиях Android. В разделе « Использование» приведены примеры использования библиотеки.

Поэтому некоторые резолюции здесь:


SetAlphaAnimation … УРОВЕНЬ API 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 -> От API LEVEL 1 -> устарел в 16

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

setAlpha FLOAT -> Уровень API 11+ ->


setImageAlpha -> API LEVEL 16+ (используйте только для ImageViews)

В случае, если кто-то кашляет ленивый и хочет, чтобы ZoomOutPageTransformer совместим с API 8. Использует 9-мерные и класс 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); } } } 

Кроме того, если вы хотите использовать PageTransformer даже в 2.2. Вы должны изменить некоторые проверки, которые сделаны в классе ViewPager . Проверьте этот пример

Чтобы быть совместимым как с прямой, так и с обратной совместимостью, я использую следующую реализацию для своих просмотров:

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