我使用StaggeredGridLayoutManager创建了一个有两列的RecyclerView,每个项目包含2个图像和文本,第一个图像的大小可以是(284*572,840*401或283*232)第二个35*35和一个文本,列表看起来很棒,但问题是,当用户向下滚动不平滑和不连续,图像是从本地存储(可绘制),我们可以做些什么来批准滚动体验。
FantasyTabAdpter.java
public class FantasyTabAdapter extends RecyclerView.Adapter<FantasyTabAdapter.MyViewHolder> {
private LayoutInflater inflater;
private ArrayList<Fantasy> fantasies;
public FantasyTabAdapter(Context context, ArrayList<Fantasy> fantasies) {
inflater = LayoutInflater.from(context);
this.fantasies = fantasies;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.fantasy_tab_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
final Fantasy fantasy = fantasies.get(position);
holder.setData(fantasy, position);
}
@Override
public int getItemCount() {
return fantasies.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView fantasyImage;
TextView fantasyTitle;
ImageView fantasyStatus;
public MyViewHolder(View itemView) {
super(itemView);
fantasyImage = (ImageView) itemView.findViewById(R.id.fantasy_tab_image);
fantasyTitle = (TextView) itemView.findViewById(R.id.fantasy_tab_title);
fantasyStatus = (ImageView) itemView.findViewById(R.id.fantasy_tab_status);
}
public void setData(Fantasy fantasy, int position) {
this.fantasyTitle.setText(fantasy.getFantasyHeader());
this.fantasyImage.setImageResource(fantasy.getFantasyHeaderImageID());
this.fantasyStatus.setImageDrawable(fantasy.statusImagePlsgod);
}
}
}在片段中设置RecyclerView
RecyclerView myRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);
StaggeredGridLayoutManager setLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
FantasyTabAdapter fantasyTabAdapter = new FantasyTabAdapter(getActivity(),fantasies);
myRecyclerView.setLayoutManager(setLayoutManager);
myRecyclerView.setAdapter(fantasyTabAdapter);发布于 2016-04-01 13:41:09
您可以缓存图像以提高性能。首先看这两个视频:
然后,在理解了原因和如何解决它的想法之后,您可以使用如下图像库:
它们实现了缓存策略,因此您只需导入其中一个并使用它,例如,而不是:
this.fantasyImage.setImageResource(fantasy.getFantasyHeaderImageID());您可以使用
Picasso.with(context).load(fantasy.getFantasyHeaderImageID()).into(this.fantasyImage);https://stackoverflow.com/questions/36343742
复制相似问题