0

私は現在小さなプロジェクトに取り組んでおり、支援が必要です (明らかに)。プロジェクト自体には、JellyBean BeanBag イースターエッグからスタンドアロン アプリを作成する作業が含まれており、成功しましたが、2.3 SDK との互換性を作成および維持したいと考えており、NineOldAndroids ライブラリを使用してそれを行うこともできました。2.3 API はメソッド setScaleX() または setScaleY() をサポートしていないため、次の変更を加えました。

から

            final float scale = lerp(MIN_SCALE,MAX_SCALE,z);
            setScaleX(scale); setScaleY(scale);

            final float scale = lerp(MIN_SCALE,MAX_SCALE,z);
            ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale);

この問題は、float 値のみを必要とする通常の呼び出しとは対照的に、View 引数を必要とする ViewHelper setScale に起因します。使ってみました

            for (int i=0; i<getChildCount(); i++) {
                View v = getChildAt(i);
                ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale);
            }

ただし、これにより、各子ビューが同時にまったく同じ縮尺に設定された結果が得られますが、元の方法では個々のビューが一意の縮尺に設定されます。どうすれば同じ効果を達成できるかについてのアイデアはありますか? 必要な情報を省略した場合は、ここで完全なソースを表示できます。

編集:次を使用して修正:

    static Random sRNG = new Random();
    static float MIN_SCALE = 0.2f;
    static float MAX_SCALE = 1f;

    static float lerp(float a, float b, float f) {
        return (b-a)*f + a;
    }

    static float randfrange(float a, float b) {
        return lerp(a, b, sRNG.nextFloat());
    }

            for (int i=0; i<getChildCount(); i++ ) {
                View v = getChildAt(i);
                float scale = randfrange(MIN_SCALE,MAX_SCALE);
                ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale);
            }
4

1 に答える 1

0

初期化はscale一度だけです。ループ内のそれぞれで異なると予想するのはなぜですか? scale初期化をループに移動します。

于 2013-09-29T18:04:08.723 に答える