2014-02-22 146 views
0

我正在從此鏈接獲取幫助:Android GridView Layout Tutorial。當我運行我的應用時,我的應用停止工作。我收到以下錯誤。 我想創建gridview,在gridview中顯示縮略圖圖像,在點擊時顯示全尺寸圖像。爲此,我將每張圖像的縮略圖和完整圖像保存爲可繪製的。這個怎麼做?請幫幫我。GridView示例不起作用

ImageAdapter接收機類

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public Integer[] mThumbIds = { 
      R.drawable.kri1, R.drawable.kri2, 
      R.drawable.kri3, R.drawable.kri4, 
      R.drawable.kri5, R.drawable.kri6, 
      R.drawable.kri7, R.drawable.kri8, 
      R.drawable.kri9,R.drawable.kri7, R.drawable.kri8, 
      R.drawable.kri9, R.drawable.kri7, R.drawable.kri8, 
      R.drawable.kri9 
    }; 

    // 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); 
     imageView.setImageResource(mThumbIds[position]); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
     return imageView; 
    } 

} 

Logcat-

02-20 07:06:19.930: E/AndroidRuntime(2541): FATAL EXCEPTION: main 
02-20 07:06:19.930: E/AndroidRuntime(2541): Process: com.example.gridview, PID: 2541 
02-20 07:06:19.930: E/AndroidRuntime(2541): java.lang.OutOfMemoryError 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:575) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:410) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.content.res.Resources.loadDrawable(Resources.java:2110) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.content.res.Resources.getDrawable(Resources.java:700) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.widget.ImageView.resolveUri(ImageView.java:638) 
02-20 07:06:19.930: E/AndroidRuntime(2541):  at android.widget.ImageView.setImageResource(ImageView.java:367) 
+1

您正在使用高分辨率的「位圖」。而不是加載縮略圖圖像到內存 –

+0

@GopalRao如何使用縮略圖?我想在點擊任何圖像時打開完整圖像。 –

+0

閱讀如何處理'位圖'[這裏](http://developer.android.com/training/displaying-bitmaps/index.html)和示例項目[here](http://developer.android.com/ shareables/training/BitmapFun.zip)... –

回答

0

您正在使用高分辨率圖像的過程中它的堆大的負荷。請嘗試下載getView()上使用的圖像。

BitmapFactory.Options options = new BitmapFactory.Options(); 
// set options for your need here 
BitmapFactory.decodeResource(context, yourImageId, options); 
+0

在哪裏可以使用此代碼。我有9個圖像所以我必須使用哪個ID圖像? –

+0

您正在獲取getView()方法的引用,正如我在答案中所述,並且每次您使用BitmapFactory方法上的圖像來縮小示例圖像以使其不填充堆內存時。看起來像圖像具有高分辨率。在你的情況mThumbIds [位置]你得到的引用。 –

+0

您可以根據我的代碼更改您的答案中的代碼。我不懂誒。 –