0

イメージビューに問題があり、77 個の画像 jpg と 126 個の引用テキストがあります。背景画像付きのすべての引用を表示したいシンプルなアプリが必要で、viewflipper を使用しているので、左/右にスワイプすると次の引用になります。私が現在使用しているコードを提供します。誰かが私を助けてくれることを願っています..それを修正するのに本当に時間を無駄にしています. 私の写真: 320x480。

                    vf = (ViewFlipper) findViewById(R.id.pages);
            for (i = 0; i<totalphrase;i++) {
                Log.i("ID",""+i);
                var = arrayphrase.get(i);

                //iv.setBackgroundColor(Color.rgb((int)Math.ceil(Math.random()*100), (int)Math.ceil(Math.random()*100), (int)Math.ceil(Math.random()*100)));
                FrameLayout a = new FrameLayout(this);
                FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT); 
                a.setLayoutParams(lp);

                b = new ImageView(this);
                LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
                FrameLayout.LayoutParams lp2= new FrameLayout.LayoutParams(740, 800,Gravity.CENTER);
                //b.setBackgroundColor(Color.rgb((int)Math.ceil(Math.random()*100), (int)Math.ceil(Math.random()*100), (int)Math.ceil(Math.random()*100)));

   // i got outofmemoryerror with this, Imgid[] -> my picture in drawable there ara 77picture
    b.setBackgroundResource(Imgid[(int)(Math.random()*Imgid.length)]);
    // -- ERROR --  outofmemory             
                b.setLayoutParams(lp1);
                a.addView(b);

                c = new ScrollView(this);
                c.setLayoutParams(lp2);
                //c.setBackgroundColor(Color.CYAN);
                c.setBackgroundColor(Color.argb(65, 53, 52, 52));
                //idsc = c.getId();
                a.addView(c);

                LinearLayout d = new LinearLayout(this);
                d.setLayoutParams(lp1);
                //d.setBackgroundResource(R.drawable.background0);
                c.addView(d);


                TextView e = new TextView(this);
                LinearLayout.LayoutParams lp3 = new LinearLayout.LayoutParams(730, 800);
                e.setLayoutParams(lp1);
                e.setText(var.phraseKey);

                d.addView(e);


                vf.addView(a);

            }

        }

私がこのようにしたい結果: Androidで構築したい例

これはxmlです

        <?xml version="1.0" encoding="utf-8"?>

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:id="@+id/fl1"
        >


        <ViewFlipper

            android:id="@+id/pages"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent" 

            android:background="@android:color/transparent"

            android:layout_gravity="top"
            >
        </ViewFlipper>


    </FrameLayout>
4

3 に答える 3

1

コメントと画像へのパスを含む 2 次元配列を作成することをお勧めします。写真の場合は、サムネイルを作成します。私はこのコードでそれをやっています

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 4;
pic = BitmapFactory.decodeFile(strPicPath, options);
image.setImageBitmap(pic);

inSampleSizeを大きくすると画像が小さくなるかどうかはわかりません...試してみる必要があります

画像は XML です:

<ImageView
                android:id="@+id/imagePreview"
                android:layout_width="134dp"
                android:layout_height="146dp"
                android:layout_weight="0.36"
                android:onClick="imageClick" />
</LinearLayout>

ギャラリーで画像を開くにはオンクリック方式を使用しますが、ズームや必要なことを行うことができます。

于 2012-06-20T10:02:50.730 に答える
0

OutOfMemory を修正するには、次のようにする必要があります。

これは私が参照するコードです。うまく機能しています。チェックしてください

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

この inSampleSize オプションは、メモリ消費を削減します。

これが完全な方法です。最初に、コンテンツ自体をデコードせずに画像サイズを読み取ります。次に、最適な inSampleSize 値を見つけます。これは 2 の累乗である必要があります。そして、最後に画像がデコードされます。

//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(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 scale=1;
        while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
            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;
}
于 2012-06-20T10:07:54.880 に答える