2013-09-03 8 views
7

これは私のviewpagerのための私のdrawableです、私はそれを実行すると、メモリ不足の結果が出て、イメージのサイズなどを減らす方法はありますか? iは、検索の多くを行うが、私は同様にそれらを使用することはできません。.. 助けてください...Android Outofmemory drawable

GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 

    ImageView imageView = new ImageView(context); 
    final int temp = position; 
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    imageView.setImageResource(GalImages[position]); 

    ((ViewPager) container).addView(imageView, 0); 
    imageView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) {} 
    }); 
    return imageView; 
} 
+0

ここでこの質問をご覧ください。 http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object – nedaRM

+0

私は同じ問題に直面しています。解決策はありますか? –

答えて

16

そのknown bug、そのためではなく、大きなファイルの。 AndroidはDrawablesをキャッシュするので、少数のイメージを使用した後にメモリが消えてしまいます。しかし、私はアンドロイドのデフォルトのキャッシュシステムをスキップして、それのための別の方法を見つけた。

Soultion: は資産で描画可能なフォルダを作成し、資産内の画像を「描画可能」フォルダを移動し、BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException { 
    AssetManager assets = context.getResources().getAssets(); 
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png"))); 
    Bitmap bitmap = BitmapFactory.decodeStream(buffer); 
    return new BitmapDrawable(context.getResources(), bitmap); 
} 

Refrence取得するには、次の機能を使用します。また、そのhttps://stackoverflow.com/posts/6116316/revisions

マニフェストファイルにの行を追加してください。

android:largeHeap="true" 
+5

アンドロイドでこの種の問題を解決しないでください:largeHeap = "true"、それは解決策ではありません –

11

解像度に応じて、ドロワーブルを下のMPIからHDPI、またはXHDPIなどのより高次元のフォルダに移動してみてください。

私の画像の寸法は400-800ピクセルの範囲でした。私はMDPIに私のドロアブルを保存しました。それは私のGalaxy S4にOutOfMemoryを投げていました。私はそれらをHDPIに移動し、問題を解決しました。

+1

私は、これが私が直面していたメモリ問題を解決したような単純なことはほとんど信じられません。ありがとうございました! –

2

ムハンマドが述べたように、ドロワーブル(またはMDPI)の画像をHDPI以上の別のディメンションフォルダに移動してみてください。

いつも圧縮PNGを可能な限り使用してください。あなたは非常に大規模にそれらを圧縮することができます多くのオンラインサイトがあります。

参照:http://developer.android.com/guide/practices/screens_support.html

2

限り、あなたのイメージのサイズが非常に大きくないとして、あなたはPNG画像のための描画可能nodpiフォルダを使用することができます。私はこれが私のために問題を解決したことを確認することができます。

0

マニフェストファイルにandroid:largeHeap:"true"を追加し、ドロウアブルイメージをフォルダmipmap-hopiに移動します。

[アンドロイド] [アンドロイドスタジオ]