1

パスの数を利用するライブ壁紙を書いています。マトリックスを使用して、形状のコンストラクターでこれらのパスをスケーリングします。

this.path = pathCoords;
this.path.transform(Scale.getMatrix());

Scale クラスでマトリックスをスケーリングする方法は次のとおりです。

public static void setMatrix(DisplayMetrics mDisplayMetrics) {
    matrix.postScale((float) mDisplayMetrics.widthPixels / 540f,
            (float) mDisplayMetrics.heightPixels / 960f);
}

プレビューではライブ壁紙が正常にロードされるようになりましたが、壁紙として設定すると、パスが再び縮小されて表示されます。実際、パスがさらに縮小するたびに、おそらくあと3回再現できます。最後に、次のようにクラッシュします。

E/AndroidRuntime(32434): java.lang.OutOfMemoryError

私は何を間違っていますか?この動作の理由は何ですか?

前もって感謝します!

4

1 に答える 1

1

スケーリングの前にリセットを追加することで、この問題を回避できました。

public static void setMatrix(DisplayMetrics mDisplayMetrics) { 
matrix.reset(); 
matrix.preScale((float) mDisplayMetrics.widthPixels / 540f, (float) mDisplayMetrics.heightPixels / 960f); 
}

ただし、問題は、ライブ壁紙がメモリに複数回ロード (およびスケーリング) され、最終的に java.lang.OutOfMemoryError が発生することだと思います。しかし、それはまったく別の問題です:)

于 2012-04-05T18:27:00.470 に答える