画廊显示强制关闭错误

问题描述:

我创建了一个应用程序,其中我创建了画廊和下面的画廊我在缩放视图中显示所选图像...当我有超过2个图像,然后我的画廊显示强制关闭错误,当我点击从图像。我需要帮助的这个..画廊显示强制关闭错误

我的应用程序的代码是:

 img = (ImageView) findViewById(R.id.GalleryView); 

    DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 

    Gallery g = (Gallery) findViewById(R.id.gallery); 

    // set gallery to left side 
    MarginLayoutParams mlp = (MarginLayoutParams) g.getLayoutParams(); 
    mlp.setMargins((int)-(metrics.widthPixels/2 + 35), mlp.topMargin,mlp.rightMargin, mlp.bottomMargin); 
    imageAdapter = new ImageAdapter(this,imgarr); 
    g.setAdapter(imageAdapter); 

    if(imgarr.length > 1) 
    {  
     img.setImageURI(Uri.parse(imgarr[0]));   
    } 
    g.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 
      dialog = ProgressDialog.show(ImageGallery.this, 
        "Loading Image", "Please wait...", true); 
      img.setImageURI(Uri.parse(imgarr[position]));    
      dialog.dismiss(); 
     } 
    }); 

ImageAdapter class: 
     public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 
    String[] imgArray; 
    public ImageAdapter(Context c,String[] imgArray) { 
     mContext = c; 
     TypedArray attr = mContext 
       .obtainStyledAttributes(R.styleable.ImageGallery); 
     mGalleryItemBackground = attr.getResourceId(
       R.styleable.ImageGallery_android_galleryItemBackground, 0); 
     this.imgArray = imgArray; 
     attr.recycle(); 
    } 

    public int getCount() { 
     return imgArray.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView i = new ImageView(mContext); 
     //Toast.makeText(getApplicationContext(), "Image path from gallery : " + imgArray[position], 
     //Toast.LENGTH_SHORT).show(); 
     //Bitmap bitmap = BitmapFactory.decodeFile(imgArray[position]); 
     Log.d("cursor lengh :", "" +imgArray[position]); 
     //i.setImageBitmap(bitmap); 
     i.setImageURI(Uri.parse(imgArray[position])); 
     i.setLayoutParams(new Gallery.LayoutParams(80, 70)); 
     i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
     i.setBackgroundResource(mGalleryItemBackground); 
     return i; 
    } 
} 

我有这些错误: enter image description here

+0

而不是在这里粘贴logcat图片,你可以改为粘贴logcat日志本身?这将非常有帮助。可见性问题。我只能看到'OutOfMemoryError:位图大小超过虚拟机预算',这意味着你的位图是巨大的。 – Ghost 2012-03-21 12:11:33

我觉得你在这行越来越错误。

img.setImageURI(Uri.parse(imgarr[position]));  

错误虚拟机预算表明图像是高分辨率,并且尺寸太大,无法容纳。

Sol:你需要缩小图像的大小。

您可以使用inSampleSizecreateScaledBitmapthis link

也明白如何使用视图,并释放其内存为efficiancy。

快乐编码:)

+0

我使用inSampleSize,同时我在onActivityResult方法中将图像保存到SD卡...我也尝试了链接的代码,你已经发送给我..但没有改变!仍然这个错误来了...我的代码是: BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 3; bitmap = BitmapFactory.decodeFile(path,options); – 2012-03-22 05:10:21