Android -- Recyclerview第一个item放大

无意间看到个需求,要求列表页的第一行放大

效果图:

在这里插入图片描述

主要方法是继承RecyclerView重写onScrollStateChanged和onScrolled方法

前者是确定滑动后第一个item可以完全显示,后者是在滑动时进行item改变

主要方法如下

    @Override
    public void onScrollStateChanged(int state) {
    
        super.onScrollStateChanged(state);
    
        if(state == 0){
            postion = linearLayoutManager.findFirstVisibleItemPosition();
            view = linearLayoutManager.findViewByPosition(postion);
            top = view.getTop();
            if(viewHeight == 0){
                viewHeight = view.getHeight();
            }
            if(top == 0){//不用偏移
                return;
            }
            else if(-top < viewHeight/2){ //遮挡小于1/2
                offset = top;
            }
            else {
                offset = viewHeight&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 RecyclerView 最后一个 Item 的点击事件,可以在 RecyclerView.Adapter 中覆盖 getItemViewType 方法,并根据 position 判断当前 item 是否为最后一个,如果是最后一个,则返回一个特殊的 ViewType;在 onCreateViewHolder 中根据 ViewType 返回不同的 ViewHolder,最后一个 ViewHolder 中设置监听事件。 代码示例: ``` public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<String> mList; // 定义最后一个 item 的 ViewType private static final int TYPE_FOOTER = 1; // 重写 getItemViewType 方法,根据 position 判断是否为最后一个 item @Override public int getItemViewType(int position) { if (position == getItemCount() - 1) { return TYPE_FOOTER; } return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_FOOTER) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer, parent, false); return new FooterViewHolder(view); } else { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_normal, parent, false); return new NormalViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof NormalViewHolder) { ((NormalViewHolder) holder).bindData(mList.get(position)); } else if (holder instanceof FooterViewHolder) { // 最后一个 item 的 ViewHolder 中设置监听事件 ((FooterViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击事件处理 } }); } } @Override public int getItemCount() { // 注意 getItemCount 方法需要加上最后一个 item return mList.size() + 1; } static class NormalViewHolder extends RecyclerView.ViewHolder { public NormalViewHolder(View itemView) { super(itemView); // itemView 的初始化操作 } public void bindData(String data) { // 数据绑定操作 } } static class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View itemView) { super(itemView); // itemView 的初始化操作 } } } ``` 其中,item_footer.xml 是最后一个 item 的布局文件。在 RecyclerView.Adapter 中,getItemCount 方法需要加上最后一个 item。 这样就可以实现 RecyclerView 最后一个 Item 的点击事件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值