18

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 で追加されたメソッドです。

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

この問題の解決策は何ですか?

4

5 に答える 5

51

したがって、ここにいくつかの解決策があります:


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)

setAlphaFLOAT -> API レベル 11+ ->


setImageAlpha-> API LEVEL 16+ (ImageViews のみに使用)

于 2013-09-25T07:38:52.260 に答える
16

最も簡単な解決策は、アニメーションをすべてのバージョンの Android にバックポートするNineOldAndroidsライブラリを使用することです。使用法セクションには、ライブラリの使用方法の例があります。

于 2013-05-26T03:12:31.960 に答える
3

誰かが怠け者で、ZoomOutPageTransformer を API 8 に戻すことを望んでいる場合備えて。nineoldandroids と 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);
        }
    }
}
于 2014-01-09T20:48:02.510 に答える