//1.獲取控件
lv = (RecyclerView) findViewById(R.id.lv);
//2.數(shù)據(jù)源
list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(getE(i));
}
//3.設置適配器
adapter = new MyAdapter(this,list);
lv.setAdapter(adapter);
//4.設置顯示方式
//線性方式
/*LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
lv.setLayoutManager(layoutManager);*/
//網(wǎng)格方式
GridLayoutManager layoutManager = new GridLayoutManager(this,2);
lv.setLayoutManager(layoutManager);
//瀑布流方式
/*StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
lv.setLayoutManager(layoutManager);*/
//設置分隔線
/*lv.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.HORIZONTAL));
lv.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));*/
//設置item條目的動畫效果
lv.setItemAnimator( new DefaultItemAnimator());
(一般使用在滑動Toolbar 和MyBottomView隱藏)滑動監(jiān)聽:
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
private MyBottomView mBottomView;
private Toolbar mToba;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
Log.e("滑動監(jiān)聽", "onScrollStateChanged: "+newState );
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
MainActivity activity = (MainActivity) getActivity();
mToba = activity.toba;
mBottomView = activity.bottomView;
if (getScollYDistance() <= 0) {
//靜止并處于最頂端狀態(tài)
mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
mToba.setVisibility(View.VISIBLE);
mBottomView.setVisibility(View.VISIBLE);
} else if (getScollYDistance() > 0 && getScollYDistance() <= 400) {//滑動在0-400距離的時候
if (getScollYDistance() <= 200) {//處于滑動到中間的時候
mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
} else {//滑出到200以外
// tvTitle.setBackgroundColor(Color.argb((int) 255, 254, 184, 6));
mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
}
float scale = (float) getScollYDistance() / 400;
float alpha = (255 * scale);
// 只是layout背景透明(仿知乎滑動效果)
mToba.setBackgroundColor(Color.argb((int) alpha, 254, 184, 6));
} else {
mToba.setVisibility(View.GONE);
mBottomView.setVisibility(View.GONE);
}
}
});
public int getScollYDistance() {
int position = mLayoutManager.findFirstVisibleItemPosition();
View firstVisiableChildView = mLayoutManager.findViewByPosition(position);
int itemHeight = firstVisiableChildView.getHeight();
return (position) * itemHeight - firstVisiableChildView.getTop();
}
多布局的適配器
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private ArrayList<ResultDemo.DataBean.DatasBean> list;
//構造方法傳遞
public MyAdapter(Context context, ArrayList<ResultDemo.DataBean.DatasBean> list) {
this.context = context;
this.list = list;
}
//設置數(shù)據(jù)源
public void setList(ArrayList<ResultDemo.DataBean.DatasBean> list) {
this.list = list;
}
//創(chuàng)建顯示視圖
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {
/**
* 根據(jù)不同type類型、創(chuàng)建不同布局ViewHolder
*/
RecyclerView.ViewHolder viewHolder = null;//抽出父類統(tǒng)一返回
if (type == 100){//顯示第一種布局
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item1, null);
viewHolder = new ViewHolderA(inflate);
}else{//顯示第二種布局
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item2, null);
viewHolder = new ViewHolderB(inflate);
}
return viewHolder;//返回統(tǒng)一
}
//綁定數(shù)據(jù)
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int position) {
//獲取數(shù)據(jù)源
ResultDemo.DataBean.DatasBean datasBean = list.get(position);
/**
* 根據(jù)不同的viewHolder顯示不同的數(shù)據(jù)操作
*/
if (viewHolder instanceof ViewHolderA){//判斷viewHolder是否為ViewHolderA類型
ViewHolderA viewHolderA = (ViewHolderA) viewHolder;//將父類viewHolder強轉(zhuǎn)為子類ViewHolderA
//數(shù)據(jù)綁定顯示
viewHolderA.titleA.setText(datasBean.getTitle());
viewHolderA.sourceA.setText(datasBean.getChapterName());
Glide.with(context).load(datasBean.getEnvelopePic()).into(viewHolderA.imgA);
}else if (viewHolder instanceof ViewHolderB){//判斷viewHolder是否為ViewHolderB類型
ViewHolderB viewHolderB = (ViewHolderB) viewHolder;//將父類viewHolder強轉(zhuǎn)為子類ViewHolderB
//數(shù)據(jù)綁定顯示
viewHolderB.titleB.setText(datasBean.getTitle());
viewHolderB.sourceB.setText(datasBean.getChapterName());
Glide.with(context).load(datasBean.getEnvelopePic()).into(viewHolderB.imgB);
}
/**
* 3.實現(xiàn)點擊事件的回調(diào)處理
*/
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener !=null){
onItemClickListener.onItemClick(position);
}
}
});
//長按監(jiān)聽、返回對應的position位置
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//1.通過接口回調(diào),把position傳給頁面使用
if (onItemClickListener !=null){
onItemClickListener.onLongItemClick(position);
}
//2.默認設置不響應
return false;
}
});
}
//返回集合長度
@Override
public int getItemCount() {
return list.size();
}
/**
* 根據(jù)position等不同規(guī)則,返回不同的類型值
*
* 本案例使用奇偶數(shù)劃分
*/
@Override
public int getItemViewType(int position) {
if (position % 2 == 0){
return 100;
}else{
return 200;
}
}
//布局輔助類ViewHolderA
class ViewHolderA extends RecyclerView.ViewHolder{
private ImageView imgA;
private TextView titleA;
private TextView sourceA;
public ViewHolderA(@NonNull View itemView) {
super(itemView);
imgA = itemView.findViewById(R.id.img);
titleA = itemView.findViewById(R.id.title);
sourceA = itemView.findViewById(R.id.source);
}
//布局輔助類ViewHolderB
class ViewHolderB extends RecyclerView.ViewHolder{
private ImageView imgB;
private TextView titleB;
private TextView sourceB;
public ViewHolderB(@NonNull View itemView) {
super(itemView);
imgB = itemView.findViewById(R.id.img);
titleB = itemView.findViewById(R.id.title);
sourceB = itemView.findViewById(R.id.source);
}
}
/**
* 1.定義接口,提供成員變量、實現(xiàn)公開的set方法
*/
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener{
void onItemClick(int position);
void onLongItemClick(int position);
}
}
CardView的常用屬性
班級 功能
card_view:cardElevation 陰影的大小
card_view:cardMaxElevation 陰影最大高度
card_view:cardBackgroundColor 卡片的背景色
card_view:cardCornerRadius 卡片的圓角大小
card_view:contentPadding 卡片內(nèi)容于邊距的間隔
card_view:contentPaddingBottom 卡片內(nèi)容與底部的邊距
card_view:contentPaddingTop 卡片內(nèi)容與頂部的邊距
card_view:contentPaddingLeft 卡片內(nèi)容與左邊的邊距
card_view:contentPaddingRight 卡片內(nèi)容與右邊的邊距
card_view:contentPaddingStart 卡片內(nèi)容于邊距的間隔起始
card_view:contentPaddingEnd 卡片內(nèi)容于邊距的間隔終止
card_view:cardUseCompatPadding 設置內(nèi)邊距,V21+的版本和之前的版本仍舊具有一樣的計算方式
card_view:cardPreventCornerOverlap 在V20和之前的版本中添加內(nèi)邊距,這個屬性為了防止內(nèi)容和邊角的重疊