2014-10-08 6 views
1

몇 가지 URL 이미지를 내 안드로이드 그리드보기에 표시하기 위해 다음과 같은 코드가 있습니다. 문제는 그리드보기에 몇 개의 이미지 만 표시하는 데 많은 시간이 걸린다는 것입니다. 다음은 내 코드입니다 :이미지 URL을 android grid view로 빠르게로드하는 방법은 무엇입니까?

public class GridViewImageAdapter extends BaseAdapter { 
private Activity activity; 
private ArrayList<HashMap<String, String>> galleryAttributes = new ArrayList<HashMap<String, String>>(); 
private int imageWidth; 
int ctr = 0; 

public GridViewImageAdapter(Activity activity, 
     ArrayList<HashMap<String, String>> galleryAttributes, int imageWidth) { 
    this.activity = activity; 
    this.galleryAttributes = galleryAttributes; 
    this.imageWidth = imageWidth; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return galleryAttributes.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return galleryAttributes.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 


    ImageView imageView; 
    if(convertView == null){ 
     imageView = new ImageView(activity); 
    }else{ 
     imageView = (ImageView) convertView; 
    } 

    LoadImage loadImage = new LoadImage(); 

    try { 
     Bitmap image = loadImage.execute(galleryAttributes.get(position).get("Link")).get(); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth)); 
     imageView.setImageBitmap(image); 

    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return imageView; 
} 


public class LoadImage extends AsyncTask<String, String, Bitmap>{ 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     try{ 
      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeStream((InputStream) new URL(params[0]).getContent(), null, o); 
      final int REQUIRED_WIDTH = imageWidth; 
      final int REQUIRED_HEIGHT = imageWidth; 
      int scale = 1; 
      while (o.outWidth/scale/2 >= REQUIRED_WIDTH 
        && o.outHeight/scale/2 >= REQUIRED_HEIGHT) 
       scale *= 2; 
      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize = scale; 
      return BitmapFactory.decodeStream((InputStream) new URL(params[0]).getContent(), null, o2); 
     } 

     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 
+0

https://github.com/nostra13/Android-Universal-Image-Loader 그리드 목록의 URL에서 이미지를 빠르게로드하고 원하는 다른 파일을 찾으려면 –

+0

을 사용하십시오. URL 이미지를 표시하기 위해 지연로드를 사용해야합니다. 귀하의 gridview –

+0

프레임 워크를 사용하지 않고 어떻게이 작업을 수행 할 수 있습니까? 누군가 이미지 코딩이 느려지지 않도록 코드를 구현하는 방법을 알려줄 수 있습니다. –

답변

0

시도가

http://square.github.io/picasso/

이 URL 당신이 그것을 열 다음에서 다운로드 한 사진을 캐시합니다이 라이브러리는, 훨씬 더 빨리 때문에로드됩니다 피카소 사용 다시 다운로드 할 필요는 없지만 캐시에서 가져 가십시오.

초기 표시가 너무 느리면 적절한 크기로 크기를 조정하십시오.

사용법도 매우 간단합니다 :

당신은 사용자 글라이드 나 피카소 수
Picasso.with(context) 
    .load(url) 
    .resize(50, 50) 
    .centerCrop() 
    .into(imageView) 
0

. 글라이드도 미리보기 이미지를 지원합니다.

Glide.with (이) .load (galleryAttributes.get (위치) 갔지 ('링크')) .thumbnail (0.1F) .into (이미지 뷰);

Picasso.with (this) .load (galleryAttributes.get (position) .get ("Link")). into (imageView);