-1

私はGridViewを使用したアプリケーションに取り組んでおり、Gridviewのすべての画像には小さな説明があり、この説明を表示している画像をクリックすると、さまざまなデバイスでテストされ、MDPIとHDPIに最適に機能しますXHDPI デバイス (高解像度デバイス) でテストすると、メモリ不足エラーが発生します。

何が問題なのか理解できません。これが私の活動です:-

GridView gridView = (GridView) findViewById(R.id.grid_view);

        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(getApplicationContext()));

        /**
         * On Click event for Single Gridview Item
         * */
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), TrafficDetails.class);
                // passing array index
                i.putExtra("id", position);

                startActivity(i);

            }
        });

そして、これが私のドローアブルからの画像を使用している私のImageAdapterです

    public Integer[] mThumbIds = {
            R.drawable.pic_1, R.drawable.pic_2,
            R.drawable.pic_3, R.drawable.pic_4,
            R.drawable.pic_5, R.drawable.pic_6,
            R.drawable.pic_7, R.drawable.pic_8,
            R.drawable.pic_9, R.drawable.pic_10,
            R.drawable.pic_11, R.drawable.pic_12,
            R.drawable.pic_13, R.drawable.pic_14,
            R.drawable.pic_15,R.drawable.pic_16,
            R.drawable.pic_17,R.drawable.pic_18,
            R.drawable.pic_19,R.drawable.pic_20,
            R.drawable.pic_21,R.drawable.pic_22,
            R.drawable.pic_23,R.drawable.pic_24,
            R.drawable.pic_25,R.drawable.pic_26,
            R.drawable.pic_27,R.drawable.pic_28,
            R.drawable.pic_29,R.drawable.pic_30,
            R.drawable.pic_31,R.drawable.pic_32,
            R.drawable.pic_33,R.drawable.pic_34,
            R.drawable.pic_35,R.drawable.pic_36,
            R.drawable.pic_37,R.drawable.pic_38,
            R.drawable.pic_39,R.drawable.pic_40,
            R.drawable.pic_41,R.drawable.pic_42,
            R.drawable.pic_43,R.drawable.pic_44,
            R.drawable.pic_45,R.drawable.pic_46,
            R.drawable.pic_47,R.drawable.pic_48,
            R.drawable.pic_49,R.drawable.pic_50,
            R.drawable.pic_51,R.drawable.pic_52,
            R.drawable.pic_53,
    };

    public String[] str_ary = {

// Description of all images
..................

    };

    // Constructor
    public ImageAdapter(Context c){
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];

    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {     

        ImageView imageView = new ImageView(mContext);
        //  TextView txt = new TextView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        imageView.setLayoutParams(new GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
        //    txt.setLayoutParams(new GridView.LayoutParams(500, 500));
        return imageView;

これを整理するのを手伝ってください。

ありがとう

4

4 に答える 4

4

以下のようにしてみてください。

ImageView imageView = new ImageView(mContext);
//  TextView txt = new TextView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(
      new  GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT));   
Bitmap m_d = BitmapFactory.decodeResource(mContext.getResources(), 
                                   mThumbIds[p_position]);
if (m_d != null)
{
     Bitmap resizedBitmap = Bitmap.createScaledBitmap(m_d, 100, 100, true);
     imageView.setImageBitmap(resizedBitmap);
}
于 2013-02-14T06:44:45.033 に答える
0

このコードを使用してビットマップを取得できます。

https://stackoverflow.com/a/823966/1168654

を使用してビットマップサイズを処理できます

final int REQUIRED_SIZE=70;

描画可能なフォルダーからビットマップを取得するためのリンクの下に、両方のコードを組み合わせてアプリで使用する必要があります。

https://stackoverflow.com/a/3035869/1168654

于 2013-02-14T06:33:24.557 に答える
0

getView で viewHolder を使用する必要があります。

以下はリストビューのサンプルですが、GridView に適用できます:)

リストビューの世界

于 2013-02-14T06:37:39.147 に答える
0

それはあなたのコーディングではありません。その通りですが、構文に問題はありません。それは、適切に考えたり計画したりしていない方法です。Android は、アプリが実行時に使用する一定量のメモリを割り当てます。10MB の RAM としましょう (これは、現在使用されているメモリの量によって異なります)。合計 15MB の RAM が必要な 10 個の画像をロードしようとしているとします。Android は通常、アプリに 5MB 余分に割り当てようとしますが、常に保証されるわけではありません。その時点で、Android は「メモリ不足」としか言えず、アプリは単純にクラッシュします。

これを参照してください。

于 2013-02-14T06:58:05.697 に答える