2014-02-22 143 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

您可以根据我的代码更改您的答案中的代码。我不懂诶。 –