竖着的Gallery,中间放大并压住两边

使用RecyclerView实现画廊效果,中间放大,并且压住两边


具体github:https://github.com/Azoft/CarouselLayoutManager

使用方法

1.添加依赖

2.添加布局,使用系统的recyclerview就好(记得导入recyclerview的包)

Item

3.自定义adapter,一般要用到item点击事件,所以自己提前写

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<Integer> mFruitList;
    private OnItemClickListener mOnItemClickListener;

    public interface OnItemClickListener{
        void onClick( int position);
        void onLongClick( int position);
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
        this. mOnItemClickListener=onItemClickListener;
    }
    public MyAdapter(List<Integer> mFruitList) {
        this.mFruitList = mFruitList;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_img,parent,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        final int index=position;
        int fruit=mFruitList.get(index);
        holder.imageView.setImageResource(fruit);
        if( mOnItemClickListener!= null){
            holder.itemView.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnItemClickListener.onClick(index);
                }
            });
            holder. itemView.setOnLongClickListener( new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    mOnItemClickListener.onLongClick(index);
                    return false;
                }
            });
        }
    }
    @Override
    public int getItemCount() {
        return mFruitList.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        public ViewHolder(View itemView) {
            super(itemView);
            imageView=itemView.findViewById(R.id.img_item_img);
        }
    }
}

4.Activity中使用

public class CarouselRecyclerView extends AppCompatActivity {
        private List<Integer> mDatas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_carousel_recycler_view);
        mDatas=new ArrayList<>();
        mDatas.add(R.drawable.fruit1);
        mDatas.add(R.drawable.fruit2);
        mDatas.add(R.drawable.fruit3);
        mDatas.add(R.drawable.fruit4);
        mDatas.add(R.drawable.fruit5);

        final CarouselLayoutManager layoutManager = new CarouselLayoutManager(CarouselLayoutManager.VERTICAL, true);
        layoutManager.setPostLayoutListener(new CarouselZoomPostLayoutListener());//实现zoom效果
        final RecyclerView recyclerView =findViewById(R.id.carousel_recyclerview);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);//固定item大小
        final MyAdapter myAdapter=new MyAdapter(mDatas);
        recyclerView.setAdapter(myAdapter);
        recyclerView.addOnScrollListener(new CenterScrollListener());
        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onClick(int position) {
                Toast.makeText(CarouselRecyclerView.this,"you click "+position+" position"
                            ,Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onLongClick(int position) {
            }
        });
        
        layoutManager.addOnItemSelectionListener(new CarouselLayoutManager.OnCenterItemSelectionListener() {
            /*
             经过使用后发现这个方法为item改变的监听,如从pos=1的滚动到pos=2完成后,会调用
                    */
            @Override
            public void onCenterItemChanged(int adapterPosition) {
                int index=adapterPosition;
                //没搞清楚这个判断是干啥的,判断是够滚动了
                if(CarouselLayoutManager.INVALID_POSITION!= adapterPosition) {
                    Toast.makeText(CarouselRecyclerView.this,"you scroll to "+index+" position"
                            ,Toast.LENGTH_SHORT).show();
                }
                Toast.makeText(CarouselRecyclerView.this,"you scroll to "+index+" position"
                        ,Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

以上就是全部代码,复制粘贴导包即可使用

总结:

自己写不出来,所以只能找

这种效果找了很久,才找到的

两个item的间距,好像不能直接设置,自己改item的xml来满足效果吧

这个项目如果把item中的ImageView改为VideoView,上下滚动还是会出现遮盖效果,但我很满足了

 

其他的详细介绍见这个项目的github地址哈哈哈

参考文章:https://www.cnblogs.com/guanhaoran/p/7060843.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值