私は多くの問題があり、すべて関連しています。いくつか私は解決しましたが、私が見つけた解決策は最終製品から私を止めているかもしれません。 私はこれがかなり一般的な問題であると確信していますので、ここではすべての問題と解決策について言及します。アンドロイドで拡大縮小されたレイヤード画像を拡大する
最終結果 私は上に3つのレイヤー(透明なpng)を持つベースイメージを持っています。表示されるレイヤーはユーザー次第です。各レイヤーは、ベースイメージにさらに情報を追加します。 私の状況では、ベースイメージは星のイメージです。ユーザーが追加のレイヤーを追加すると、コンステレーションの境界線、スターの名前、およびグリッドが表示されます。 また、ユーザは、空の一部のより鮮明な画像を得るために、領域を拡大することができる必要があります。
最初の問題 イメージサイズが2つ(1324×1872)大きいため、OutOfMemoryエラーが発生します。このコードは支援してきましたが、
/**
* This method scales an image in the assets directory and returns a
* BitmapDrawable object that can be passed to an images setImageBitmap or a
* views setBackgroundDrawable by passing this method into the constructor
* of BitmapDrawable.
* eg ViewGroup.setBackgroundDrawable(
* new BitmapDrawable(getScaledBitMap(this, imagePath, 2)));
*
* @param context
* @param imgFullPath
* @param imageSize
* @return
* @throws IOException
*/
public static Bitmap getScaledBitMap(Context context, String imgFullPath,
int imageSize) throws IOException
{
InputStream instream;
instream = context.getAssets().open(imgFullPath);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = imageSize;
Bitmap bitmap=BitmapFactory.decodeStream(instream, null, options);
return bitmap;
}
を使用して画像を拡大縮小が解決しよう
3層をロードするとき、私はまだのOutOfMemoryエラーが発生します。私はまた、画質が低下してズームするときに画像の拡大縮小が問題になると思います。
第2号。 私が見た限りでは、画像の1つが透明でない場所にpngを重ねることはできません。透明でない画像(ベース画像)のみを表示する透過画像は表示されません。
これを解決するには、FrameLayoutの背景をベースイメージに設定し、3つのレイヤーだけをそのレイアウトの子として残します。
第3号 画像を拡大します。 私はここに解決策があるかもしれないが、How can I get zoom functionality for images?が見つかりましたが、エミュレータにはマルチタッチがなく、デバイスがそれを泳いだときにデバイスが気に入らなかったので、まだテストしていません。私は現在、テストする他のデバイスがありません。
outOfMemoryErrorを取得せずに4つの画像(基本+ 3レイヤー)をすべて読み込み、画像を拡大する機能を持つ最良の方法は何ですか?
私は必要なコードでプロジェクトを作成したhere