0

次のようなレイアウトを作成する必要があります。

スクリーンショット

ご覧のとおり、すべてのビュー (画像、ボタン) はスクロール可能な画面にあります。アルバム用のレイアウトです。

問題は、このアルバム画面に多くの画像を表示すると、メモリ不足エラーでクラッシュすることです。

LinearLayout私が選んだ方法は、それらすべてを a の中に入れることScrollViewです。リストビューを使用できる多くのビューを表示する必要があるかどうかはわかっていますが、これらすべてのビューをListView.

誰でも私を助けることができますか?

4

3 に答える 3

0

inSampleSizeを使用して、占有するメモリを減らすことができます。

これが私のコードです

public static Bitmap decodeAndResizeFile(File f) {
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 70;

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}

ここでは、を使用して画像をデコードしinSampleSize、このコードはあなたに最適なinSampleSize値を見つけます。

それは私にとってはうまくいきました。

上記のコードを使用したくない場合は、未使用のメモリを使用bitmap.recycle()System.gc()て解放することもできますが、上記のコードは問題なく機能します。2つのうちどちらでも使用できます。

objbitmap.recycle();
objbitmap = null;
System.gc();

うまくいけば、これで問題が解決するかもしれません!

于 2013-03-07T05:22:06.680 に答える
0

このタイプのビューを作成するには、線形レイアウトを使用する必要があります。ここみたいに

リニア レイアウト (縦)
タイトル
イメージ
リニア レイアウト 横
{
リニア レイアウト 縦
ボタン ボタン
イメージ
イメージ
...
}
リニア レイアウト 縦
{
イメージ
イメージ
...
}

于 2013-03-07T05:00:59.853 に答える
0

次の 2 つのオプションが考えられます。

  1. の各アイテム ビューにListView互い違いに配置された要素のグループが含まれるように、アイテムを編成しListViewます。N 個の画像ごとに、上部/下部をビューの境界に並べる必要があります。効果が得られるように 4 ~ 6 枚の画像をずらしたパターンに配置することもできますが、要素のブロックは再利用できるビューになります。

  2. 2 つのListView要素を並べて使用します。OnScrollListenerそれぞれに を渡してListView、どちらがタッチされたかに関係なく、スクロールの動きを同期させて、1 つのビューのように見せることができます。このようにして、イメージを完全にずらすことができますが、1 つのデータ ソースから 2 つのビューを提供する必要があるため、アダプターは少し手間がかかります。

于 2013-03-07T04:49:44.700 に答える