Подтвердить что ты не робот

Альтернатива 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, и у меня есть минимальная версия sdk API level 8. Ниже перечислены те методы, которые были добавлены в уровне API 11:

  • setAlpha()
  • setTranslationX()
  • setScaleX()
  • setScaleY()

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

4b9b3361

Ответ 1

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

Ответ 2

Итак, некоторые резолюции здесь:


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 1 → устарел в 16

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

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


setImageAlpha → УРОВЕНЬ API 16 + (используйте только для ImageViews)

Ответ 3

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

Ответ 4

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

Ответ 5

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

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