2011-08-01 2 views
1

일부 이미지가있는 격자보기가있는 앱을 프로그래밍하고 있으며 모든 이미지가 화면에 맞지 않을 수 있으므로 기본 세로 스크롤을 사용하고 있습니다. 항상 스크롤을하고 새 행이 표시 될 때 새 행의 렌더링에 지연이있는 것으로 보입니다.android gridview lag on scroll

모든 이미지는 드로어 블이므로 최소한 이미지를로드하는 것과 같은 이유로 명시 적으로는 발생하지 않습니다. 그래서, 문제를 해결하는 방법에 대한 모든 아이디어? 내 atrix에서 스크롤이 지연되고 앱이 실행될 최종 장치가 그보다 훨씬 나쁩니다.

편집 - 여기에 몇 가지 코드 :

public View getView(int position, View convertView, ViewGroup parent) { 
    T item = getItem(position); 
    Box box = convertView == null ? new Box(mContext) : (Box) convertView; 
    onBindModel(box, item); 
    return box; 
} 

@Override 
public void onBindModel(Box box, Model item) { 
    box.param.putSerializable("model", item); 
    box.setDescricao(item.getNome()); 
    box.getModelImageView().setImageResource(item.thumbResId); 
} 

편집

제안 그래서, 그냥이 코드를 시도했지만 여전히 같은 결과를 얻을 수 :

@Override 
public void onBindModel(final Box box, final Model item) { 
    box.param.putSerializable("model", item); 
    box.setDescricao(item.getNome()); 

    new Thread(){ 
     public void run() { 
      Message msg = new Message(); 
      msg.obj =box.getModelImageView(); 
      msg.arg1 =item.thumbResId; 

      mHandler.sendMessage(msg); 
     } 
    }.start(); 
} 

private Handler mHandler = new Handler() { 
    @Override 
    public void handleMessage(Message message) { 
     Bitmap bm = BitmapFactory.decodeResource(getResources(), message.arg1); 
     setImage((ImageView) message.obj,bm); 
    } 
}; 

public void setImage(ImageView imgView, Bitmap bm) { 
    imgView.setImageBitmap(bm); 
} 

다음 줄로 스크롤 할 때 응답이 없으면 정상적으로 계속됩니다. 사전에

덕분에

+0

Glide를 사용합니다. 이것에 대한 많은 이유가있을 수 있습니다. – Samuel

+0

문제를 해결 했습니까? 나는 같은 문제를 겪고있다. 이미지는 서버에서로드되고 별도의 스레드에서 디코딩됩니다. UI-THread에서 setImageBitMap을 수행하면 여전히 약간 뒤떨어져 있습니다. ... –

+0

실제로 UI 디자인이 변경되었지만 새 디자인에서는 여러 개의 격자를 사용하여 여러 페이지를 만들었습니다. 페이징을 할 때 전체 그리드를 스 와이프합니다. 그러나 내가 편집에 실제로 게시 한 코드는 더 나은 방법으로 이미지를로드하고, 액티비티/프래그먼트의로드를 차단하지 않으며 나머지 응용 프로그램에 대한 핸들러 접근 방식을 사용하고 있습니다. – RMalke

답변

1

모든 이미지는 드로어 블, 그래서 그렇지 명시 적으로, 적어도, 이미지를로드 처럼 무언가에 의해 발생하지 않습니다.

이것은 사실이 아닙니다. 작업은 UI 스레드에서 수행됩니다. http://developer.android.com/reference/android/widget/ImageView.html#setImageResource(int)

이미지를 게으른로드하는 것이 좋습니다. 여러 접근법이 모든 곳에서 광범위하게 논의되었습니다. 그것을위한 Google.

0

오래된 질문,하지만 트릭했다 :

Glide.with(context) 
      .load(stickersData[position]) 
      .into(imageView); 

당신은 당신의 코드를 게시 할 수