StaggerdRecyclerView
アンドロイド滝、完璧なソリューションスライディングプロセス項目の場所の混乱は、プルダウンリフレッシュブランクのトップは、トップロードより障害やその他の問題、あなたはアニメーション効果を達成することができます
レンダリング
統合されました
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.moo611:StaggerdRecyclerView:latestversion'
}
基本的な使い方
1.追加レイアウトファイル
<com.atech.staggedrv.StaggerdRecyclerView
android:id="@+id/str"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.お使いのモデル、StaggedModelインタフェースを達成するために必要
//示例 example
public class FakeModel implements StaggedModel {
private int width;
private int height;
private int resourceId;
public FakeModel(int width, int height, int resourceId){
this.width = width;
this.height = height;
this.resourceId = resourceId;
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public String getTitle() {
return null;
}
@Override
public String getThumb() {
return null;
}
@Override
public int localResorce() {
return resourceId;
}
}
3.あなたのアダプタ、継承staggedadapterへの必要性
class MyAdapter<T extends StaggedModel> extends StaggedAdapter<T> {
MyAdapter(Context c) {
super(c);
}
@Override
public RecyclerView.ViewHolder addViewHolder(ViewGroup viewGroup, int i) {
//绑定自定义的viewholder
View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_item_layout,viewGroup,false);
return new MyHolder(v);
}
@Override
public void bindView(RecyclerView.ViewHolder viewHolder, int i) {
MyHolder myHolder = (MyHolder)viewHolder;
// 在加载图片之前设定好图片的宽高,防止出现item错乱及闪烁
ViewGroup.LayoutParams layoutParams = myHolder.img.getLayoutParams();
layoutParams.height = datas.get(i).getHeight();
myHolder.img.setLayoutParams(layoutParams);
myHolder.img.setImageResource(datas.get(i).localResorce());
}
}
4.あなたのviewholder、およびrecyclerviewの文言と同じ時間。
class MyHolder extends RecyclerView.ViewHolder{
ImageView img;
public MyHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
}
}
5.mainactivity
MyAdapter<FakeModel> staggedAdapter;
StaggerdRecyclerView str;
private List<FakeModel> datas = new ArrayList<>();
...
str = findViewById(R.id.str);
staggedAdapter = new MyAdapter<>(this);
str.link(staggedAdapter,2);
str.addCallbackListener(new LoadMoreAndRefresh() {
@Override
public void onLoadMore() {
loadMore();//加载更多
}
@Override
public void onRefresh() {
refresh();//下拉刷新
}
});
refresh();
...
その他の機能
アニメーション
str.addAnimation(R.anim.right_to_left);
セット間隔
str.addDecoration(new GridItemDecoration(this,10));
リフレッシュ禁止
str.enableRefresh(false);
もっとロードから
str.enableLoadMore(false);
原則
ときにスライド位置障害
Recyclerviewはスライドでは、キャッシュの再利用メカニズムので、アイテムを使用すると、ImageViewの幅と高さが不明な場合は、それは混乱と位置が点滅の原因となります、再描画されます。
あなたは空白のトップを更新すると
リフレッシュspanIndexの再生の計算項目で、その結果、onItemsChanged方法のStaggeredGridLayoutManagerトリガ行うことnotifyDataSetChanged()メソッドを使用する場合、項目の場所の欄はブランクの頂部につながる、変更されています。変更はnotifyItemRangeInserted、notifyItemRangeChangedで部分リフレッシュが発生することはありません。
参照
https://www.jianshu.com/p/d34075c0f287