3

ライブ壁紙の作り方を学んでいますが、ジレンマがあります。

解像度の画面サイズは非常に多いのですが、すべてのバージョンのコードで1セットのアートワークを再スケーリングするにはどうすればよいですか?それらの多くでapkの画像を見て、それらが再スケーリングされるので、それが行われたことを私は知っています。

簡単なポジショニングを必要としない1つの画像だけでしたが、私の問題は、すべてのデバイスに合うように背景画像を再スケーリングする必要があることです。また、その背景の特定のxおよびy位置に合うアニメーションもあります。背景全体がアニメーション化されているように見えるが、その一部のみがアニメーション化されているように見えるように画像を配置します(フレームごとのライブ壁紙の300枚の画像から離れる私の方法)。

したがって、背景画像を再スケーリングする必要があり、アニメーションも背景画像と同じパーセンテージに再スケーリングする必要があり、特定のxおよびy位置に配置する必要があります。

私がこれを実行できるように、どんな助けもいただければ幸いです。


私はいくつかのことに疲れました。すべての例でスケーラーを作成すると考えました。intscaler; 次にonSurfaceChangedscaler= width / 1024; //大きい画像が1024の場合、どこでも使用できる比率が得られます。次に、scaleBitmapを使用して、スケーラーに画像の高さと幅を掛けてスケーリングします。また、同じスケーラーを使用して、例の画像xを50に配置し、同じものを使用してスケーリングします。x = scaler * 50; スケーリングとポジショニングの面倒を見る必要があります。これをすべてJavaに変換する方法は、次のレッスンです。私はJavaを初めて使用するため、フラッシュとPHPのプログラムを使用していましたが、これは大きく異なります。 。次は、幅をパンする方法です。画面を左右に動かすときに、画像を表示する方法は、私が理解した次のパズルです。今のところ、幅が表面の2倍であっても、同じ幅を示しています。あなたが答えを得るか、どこかで私はこれに関する情報を見つけることができますそれは大いにありがたいです。

4

2 に答える 2

12

ええと、私が言えるのは「現実の世界へようこそ」だけです。onSurfaceChanged を介して渡された画面サイズを取得します。はい、このデータに基づいてすべてをスケーリングする方法を理解するのはあなたの仕事です。それが彼らが私たちに大金を払う理由です。:-) リソースが、サポートしようとしている最大のディスプレイに収まる十分な大きさであることを確認する必要があります。そのため、常に物事を縮小することになります (拡大するよりもはるかに歪みが少なくなります)。

ここで「画面の独立性に関するベスト プラクティス」から始めることを提案します: http://developer.android.com/guide/practices/screens_support.html

さらにヘルプが必要な場合の追加コメント...

  1. 複数の縦横比をサポートする必要があるため、幅だけを使用してアートワークを (必然的に) 拡大縮小することはできません。画面の縦横比がアートワークと一致しない場合は、アートワークを歪ませるか、空白を残すかなどを決定する必要があります。
  2. 画面のサイズを渡す際の問題をどのように解釈するかわかりません。私たちのほとんどは、すべてのアクティブなコードを 1 つのエンジン クラス内に配置しているため、メソッドはプライベート変数を介してデータを共有できます。たとえば、SDK の Cube 壁紙では、onSurfaceChanged() は mCenterX を後で drawCube() で使用できるように設定します。同様の単純なアプローチから始めることをお勧めします。
  3. スクロールの処理には、ある程度の「知性」と、onOffsetsChanged() を介して受け取るデータの慎重な評価が必要です。xStep は、ランチャーがサポートする画面の数を示します。通常、xStep は 0.25 で、5 つのスクリーン (xOffset = 0、0.25、0.5、0.75、または 1) を示しますが、0 から 1 までの任意の値にすることができます。0.5 は 3 つの画面を示します。xPixels は、現在の画面に基づいて、ランチャーが画像をどれだけシフトさせたいかを示します。通常、これを尊重する必要があります。私の電話では、ランチャーは物理画面の 2 倍のピクセルを持つ仮想壁紙を「要求」するため、各スクロールは 1 画面のピクセルの 4 分の 1 だけを移動することになっています。これらすべて、およびその他の詳細は、http://developer.android.com/reference/android/app/WallpaperManager.htmlに記載されています。 これは「簡単な」コーディングではありません。アプリは壁紙よりも簡単です。:-)

がんばれ...ジョージ

PSもう1つ追加します。ランチャーが必要とする壁紙の「必要な最小幅」を取得したい場合があるため、xPixelsで暗黙的な仮想化を明示的に理解できます。たとえば、私のエンジン コンストラクターでは、

mContext = getApplicationContext();
mWM = WallpaperManager.getInstance(mContext);
mDW = mWM.getDesiredMinimumWidth();

私のデバイスの幅は 320 ピクセルです。私は mDW = 640 を取得します。画面から画面へとスクロールすると、xPixels は毎回 80 ずつ変化します... 4 つのスクロール (5 つの画面にわたって) は、表示されるアートワークの量を 2 倍にすることになっているためです (この効果は「視差スクロール」と呼ばれます)。一番右のセクションの xPixels は 0 です。中央 (5 つのうち) のセクションには xPixels = -160 などがあります。

于 2011-03-18T02:47:46.073 に答える
-1

このコード スニペットを使用して、1 つの画像をさまざまな画面サイズに合わせて拡大縮小しました。

Bitmap image1, pic1;
image1 = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
float xScale = (float) canvas.getWidth() / image1.getWidth();
                float yScale = (float) canvas.getHeight() / image1.getHeight();
                float scale = Math.max(xScale, yScale); //selects the larger size to grow the images by

                //scale = (float) (scale*1.1); //this allows for ensuring the image covers the whole screen.

                scaledWidth = scale * image1.getWidth();
                scaledHeight = scale * image1.getHeight();

                    pic1 = Bitmap.createScaledBitmap(image1, (int)scaledWidth, (int)scaledHeight, true);

一部の画面比率では画像から縮小されるため、端に重要な情報が含まれていないことを確認してください。

于 2012-10-20T09:12:56.997 に答える