Android recycleview实现混合itemview,以及recycleview添加头部尾部

}

}

2、entity类

public class TestEntity implements Serializable, MultiItemEntity {

private String title;

private String https;

private String ones;

private boolean ifshow;

private int itemType;

public static final int style_0 = 0;

public static final int style_1 = 1;

public static final int style_2 = 2;//重要参数

public String getOnes() {

return ones;

}

public void setOnes(String ones) {

this.ones = ones;

}

public int getItemType() {

return itemType;

}

public void setItemType(int itemType) {

this.itemType = itemType;

}

public boolean isIfshow() {

return ifshow;

}

public void setIfshow(boolean ifshow) {

this.ifshow = ifshow;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getHttps() {

return https;

}

public void setHttps(String https) {

this.https = https;

}

}

public class ShareRecylerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Handler.Callback{

private List listEntity;

private Context context;

private LayoutInflater inflater;

private ListOnItemListener onItemListener;

private ShotOnClickListener onShotListener;

private Handler handler;

public void setOnItemListener(ListOnItemListener onItemListener){

this.onItemListener = onItemListener;

}

public void setOnShotListener(ShotOnClickListener onShotListener){

this.onShotListener = onShotListener;

}

public ShareRecylerViewAdapter(Context context, List entitys) {

this.context = context;

this.listEntity = entitys;

inflater =LayoutInflater.from(context);

handler = new Handler(Looper.getMainLooper(), this);

}

@Override

public int getItemViewType(int position) {//item类型方法

if (listEntity.get(position).getType() == SharePlatformType.DIRECT_SHARE_PLAT) {

return SharePlatformType.DIRECT_SHARE_PLAT;

} else if (listEntity.get(position).getType() == SharePlatformType.TITLE_SHARE_PLAT) {

return SharePlatformType.TITLE_SHARE_PLAT;

} else {

return SharePlatformType.FOREIGN_SHARE_PLAT;

}

}

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//itemlayout加载

final View view;

if (viewType == SharePlatformType.DIRECT_SHARE_PLAT) {

view = inflater.inflate(R.layout.layout_share_yanshi_item,parent,false);

return new ShareViewHolder(view);//绑定数据

} else if (viewType == SharePlatformType.TITLE_SHARE_PLAT) {

view = inflater.inflate(R.layout.share_title_content,parent,false);

return new ShareViewHolderTitle(view);

} else {

view = inflater.inflate(R.layout.share_content_text,parent,false);

return new ShareViewHolderContext(view);

}

}

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {//绑定事件

if(holder instanceof ShareViewHolderTitle){

ShareViewHolderTitle viewHolderTitle = (ShareViewHolderTitle)holder;

viewHolderTitle.setData(position);

}

if(holder instanceof ShareViewHolder){

ShareViewHolder shareViewHolder = (ShareViewHolder)holder;

shareViewHolder.shareSelected.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// onOneKeyShare();

}

});

shareViewHolder.shotSelected.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onShotListener.onClick();

}

});

shareViewHolder.sharkSelected.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onShotListener.onSharkClick();

}

});

}

if(holder instanceof ShareViewHolderContext){

final ShareViewHolderContext viewHolderContext = (ShareViewHolderContext)holder;

viewHolderContext.setData(position);

viewHolderContext.layout.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onItemListener.onClick(viewHolderContext.itemView,viewHolderContext.getLayoutPosition());

}

});

}

}

private void showToast(String text){

Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

}

@Override

public int getItemCount() {

return listEntity.size();

}

@Override

public boolean handleMessage(Message msg) {

String toastMsg = (String) msg.obj;

showToast(toastMsg);

return false;

}

class ShareViewHolder extends RecyclerView.ViewHolder {

public ImageView shareSelected;

public ImageView shotSelected;

public ImageView sharkSelected;

public ShareViewHolder(View itemView) {

super(itemView);

shareSelected =(ImageView) itemView.findViewById(R.id.mSelected);

shotSelected = (ImageView) itemView.findViewById(R.id.mShot);

sharkSelected = (ImageView) itemView.findViewById(R.id.mShark);

}

}

class ShareViewHolderTitle extends RecyclerView.ViewHolder {

public TextView textView;

public ShareViewHolderTitle(View itemView) {

super(itemView);

textView =(TextView) itemView.findViewById(R.id.titleTxt);

}

public void setData(int position){

textView.setText(listEntity.get(position).getName());

}

}

class ShareViewHolderContext extends RecyclerView.ViewHolder {

public ImageView icon;

public TextView name;

public RelativeLayout layout;

public ShareViewHolderContext(View itemView) {

super(itemView);

icon = (ImageView)itemView.findViewById(R.id.mIcon);

name = (TextView)itemView.findViewById(R.id.mTitle);

layout = (RelativeLayout) itemView.findViewById(R.id.onMainLayout);

}

public void setData(int postion){

name.setText(listEntity.get(postion).getName());

icon.setImageResource(listEntity.get(postion).getIcon());

}

}

public interface ListOnItemListener{

public void onClick(View view,int position);

}

public interface ShotOnClickListener{

public void onClick();

public void onSharkClick();

}

}

3、MainActivity调用recycleview

初始化

private List testEntities = new ArrayList<>();

private RecyclerView recyclerView;

private NewsAdapter mNewsAdapter;

recyclerView = (RecyclerView)findViewById(R.id.myrecyclerview);

mNewsAdapter = new NewsAdapter(testEntities);

mNewsAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {

@Override

public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

Toast.makeText(MainActivity.this,position+“nnnn”,Toast.LENGTH_LONG).show();

}

});

recyclerView.setAdapter(mNewsAdapter);

赋值

for (int i=0;i<29;i++){

TestEntity testEntity = new TestEntity();

if (i%4==0&&i!=0){

testEntity.setItemType(2);

}else {

testEntity.setItemType(1);

}

if (i==0){

testEntity.setItemType(0);

testEntity.setHttps(“baidu.com”);

testEntity.setTitle(“百度。com”);

testEntity.setOnes(“头部”);

}

if (i==28){

testEntity.setItemType(0);

testEntity.setHttps(“baidu.com”);

testEntity.setTitle(“百度。com”);

testEntity.setOnes(“尾部”);

}

testEntity.setHttps(“baidu.com”);

testEntity.setTitle(“百度。com”);

testEntities.add(testEntity);

if (i==28){

// newgroupsAdapter.notifyDataSetChanged();

mNewsAdapter.notifyLoadMoreToLoading();

}

}

头部与尾部item_add_groups_number.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:melove=“http://schemas.android.com/apk/res-auto”

android:orientation=“vertical”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”>

<RelativeLayout

android:id=“@+id/item_company_member_layout”

android:layout_width=“match_parent”

android:layout_height=“90dp”

<ImageView

android:id=“@+id/item_information_choose_image”

android:layout_width=“15dp”

android:layout_height=“15dp”

android:layout_alignParentRight=“true”

android:layout_marginRight=“12dp”

android:src=“@drawable/ic_launcher_background”

android:visibility=“invisible”/>

<ImageView

android:id=“@+id/item_company_member_head_image”

android:layout_width=“44dp”

android:layout_height=“44dp”

android:layout_below=“@+id/item_information_choose_image”

android:layout_centerHorizontal=“true”

android:scaleType=“centerCrop”

android:visibility=“gone”

android:src=“@drawable/ic_launcher_background”

/>

<TextView

android:id=“@+id/item_company_member_name”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_marginTop=“8dp”

android:layout_below=“@+id/item_company_member_head_image”

android:background=“@color/colorPrimary”

android:layout_centerHorizontal=“true”

android:text=“林晓”

android:gravity=“center”

android:textSize=“18sp”/>

混合1   item_news_1.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:melove=“http://schemas.android.com/apk/res-auto”

xmlns:app=“http://schemas.android.com/apk/res-auto”

android:id=“@+id/holder_reward_layout”

android:layout_width=“match_parent”

android:layout_height=“98dp”

android:orientation=“vertical”>

题外话

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

round=“?attr/selectableItemBackground”–>

题外话

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-kt5BDF5i-1714288633335)]

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android中,可以通过自定义RecyclerView的ItemAnimator来实现滑动ItemView变大的效果。 首先,我们需要创建一个类来继承自RecyclerView.ItemAnimator,该类将负责处理ItemView的动画效果。代码如下: ```java public class CustomItemAnimator extends RecyclerView.ItemAnimator { @Override public boolean animateRemove(RecyclerView.ViewHolder holder) { return false; } @Override public boolean animateAdd(RecyclerView.ViewHolder holder) { return false; } @Override public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { return false; } @Override public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) { if (oldHolder != null) { // 缩小旧的ItemView AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(ObjectAnimator.ofFloat(oldHolder.itemView, "scaleX", 1f, 0.5f), ObjectAnimator.ofFloat(oldHolder.itemView, "scaleY", 1f, 0.5f)); animatorSet.setDuration(getChangeDuration()).start(); } if (newHolder != null) { // 放大新的ItemView AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(ObjectAnimator.ofFloat(newHolder.itemView, "scaleX", 0.5f, 1f), ObjectAnimator.ofFloat(newHolder.itemView, "scaleY", 0.5f, 1f)); animatorSet.setDuration(getChangeDuration()).start(); } return false; } @Override public void runPendingAnimations() { } @Override public void endAnimation(RecyclerView.ViewHolder item) { } @Override public void endAnimations() { } @Override public boolean isRunning() { return false; } } ``` 接下来,在使用RecyclerView的地方,需调用setItemAnimator方法将自定义的ItemAnimator设置给RecyclerView。代码如下: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setItemAnimator(new CustomItemAnimator()); ``` 这样,当RecyclerView中的ItemView发生变化时,就会执行我们自定义的动画效果了。其中,在animateChange方法中我们通过对新旧ItemView的scaleX和scaleY属性进行属性动画来实现滑动ItemView变大的效果。 希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值