마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

RecyclerView GridLayout 버벅이는 현상때문에 문의드립니다

0 추천

안녕하세요 

RecyclerView를 사용하여 GridLayout을 구현 하고 있는데요

GridLayout에서 90개정도의 이미지를 뿌려주고 있는데 버벅임이 심해서 구글링을 해봤는데 마땅한 답변이 없어서 직접 질문 올립니다

고수님들 답변 부탁드리겠습니다

감사합니다

소스 첨부하겠습니다

public class SimpleStringAdapter extends RecyclerView.Adapter<SimpleStringAdapter.ViewHolder> {

    private View.OnClickListener onItemViewClickListener = null;
    private ArrayList<File> fileArray = null;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public final ImageView imageView;

        public ViewHolder(View v) {
            super(v);
            imageView = (ImageView) v.findViewById(R.id.imageView);
        }
    }

    public SimpleStringAdapter(ArrayList<File> fileArray) {
        this.fileArray = fileArray;
    }

    /**
     * 클릭 리스너를 설정한다
     * @param onItemViewClickListener
     */
    public void setOnItemViewClickListener(View.OnClickListener onItemViewClickListener) {
        this.onItemViewClickListener = onItemViewClickListener;
    }

    /**
     * 새로운 ViewHolder를 작성한다
     * LayoutManager에서 호출
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row, parent,false);
        if (onItemViewClickListener != null) {
            v.setOnClickListener(onItemViewClickListener);
        }
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    /**
     * View 안의 데이터를 변경한다
     * LayoutManager에서 호출
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Bitmap bitmap = BitmapFactory.decodeFile(fileArray.get(position).getPath());
        holder.imageView.setImageBitmap(bitmap);
    }

    /**
     * 데이터 수를 반환한다
     * LayoutManager에서 호출
     * @return
     */
    @Override
    public int getItemCount() {
        return fileArray.size();
    }
}

 

우랴 (3,680 포인트) 님이 2017년 11월 9일 질문

1개의 답변

+1 추천
 
채택된 답변
1. onBindViewHolder 호출시 매번 decode하면 느립니다. decode된 bitmap을 캐시하세요.

2. bitmap decode는 백그라운드 스레드에서 하세요.
익명사용자 님이 2017년 11월 9일 답변
우랴님이 2017년 11월 10일 채택됨
picasso 라이브러리를 이용하여 해결 하였습니다
감사합니다
오 감사합니다..... 저도 저렇게 하고있었는데 원인을 찾았네요
...