RecyclerView、CardView和Palette打造炫酷流式布局效果

RecyclerView、CardView和Palette都是android5.0新特性。下面这个小案例就是通过RecyclerView的StaggeredGridLayoutManager实现流式布局,CardView实现圆角, Palette拾取不同的图片的颜色值设置给CardView做背景色。

###效果展示
效果图

首先了解一下要用的三个控件:

  • RecyclerView和ListView不同的是系统提供3个不同的布局管理器(LayoutManager)来协调布局,没有自带的条目点击事件,提供了自己的适配器RecyclerView.Adapter
    a.LinearLayoutManager:线性布局
    b.GridLayoutManager: 网格布局
    c.StaggeredGridLayoutManager: 瀑布流布局

  • CardView其实就是一个继承与FramLayout的自定义VIew,可以用了实现圆角卡片的效果;CardLayout拥有高度和阴影,以及轮廓裁剪,圆角等功能
    1.设置圆角:card_view:cardCornerRadius=“10dp”
    2.设置高度:card_view:cardElevation=“10dp”
    3.设置内边距:card_view:contentPadding=“10dp”
    4.设置背景色:card_view:cardBackgroundColor=“color/colorPrimary”

  • Palette识别颜色通过下面的方法拾取不同的颜色值
    1.最活跃的颜色:palette.getVibrantColor(0)
    2.最暗的活跃色: palette.getDarkVibrantColor()
    3.最亮的活跃色: palette.getLightVibrantColor()
    4.最柔和的颜色:palette.getMutedColor(0)
    5.最暗的柔和色:palette.getDarkMutedColor(0)
    6.最亮的柔和色:palette.getLightMutedColor(0)

###接下来就是编码了

  • 首先引入依赖库
    compile 'com.android.support:recyclerview-v7:23+'
    compile 'com.android.support:cardview-v7:23+'
    compile 'com.android.support:palette-v7:23+'
  • 主布局
   <android.support.v7.widget.RecyclerView
       android:id="@+id/recyclerview"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
   </android.support.v7.widget.RecyclerView>
  • 初始化布局和控件
 RecyclerView mRecyclerView = ((RecyclerView)  findViewById(R.id.recyclerview));
         mRecyclerView.setAdapter(new StaggeredAdapter(mContext));
        //设置布局管理器 3表示每行显示3列,
         mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));
  • 主要的功能还是在这个adapter中进行操作的,图片的复用以及,颜色值得拾取。这里加载的是本地资源,重在实现效果;如果加载网络图片的话就要考虑性能和效率的问题了。
/**
 * Created by rongtao on 2016/3/21.
 */
public class StaggeredAdapter extends RecyclerView.Adapter<StaggeredAdapter.MyViewHolder> {
    private LayoutInflater mLayoutInflater;
    private Context mContext;
    private int[] images = new int[]{
            R.drawable.a,
            R.drawable.b,
            R.drawable.c,
            R.drawable.d,
            R.drawable.e,
            R.drawable.f,
            R.drawable.g,
            R.drawable.h,
            R.drawable.i,
            R.drawable.j
     };

    public StaggeredAdapter(Context context) {
        super();
        this.mContext = context;
        mLayoutInflater = LayoutInflater.from(mContext);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mLayoutInflater.inflate(R.layout.list_item, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {

        holder.iv_Image.setImageResource(images[position % 10]);
        //获取当前imageView中的Drawable
        Drawable drawable = holder.iv_Image.getDrawable();
        if (drawable instanceof BitmapDrawable) {
            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;

 //从  BitmapDrawable拾取颜色值         
 Palette.from(bitmapDrawable.getBitmap())
            .generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {
                    //拾取不到颜色时的默认值       
                          holder.cardView.setCardBackgroundColor(palette.getVibrantColor(Color.YELLOW));
                }
            });
        }
    }


    @Override
    public int getItemCount() {
        return images.length * 2;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView iv_Image;
        CardView cardView;

        public MyViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.cardview);
            iv_Image = (ImageView) itemView.findViewById(R.id.iv_image);
        }
    }
}

自定义RecycleViewLayoutManager源码 访问密码 1fa2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerViewCardViewAndroid 开发中常用的两个控件,它们经常被一起使用来实现列表展示的功能。 RecyclerViewAndroid 自带的列表控件,相比于 ListView 和 GridView,它具有更好的性能和更加灵活的布局方式。相比于 ListViewRecyclerView 可以实现更好的复用机制,可以提高列表的滑动流畅度和减少内存占用。 CardViewAndroid 自带的卡片式布局控件,它可以让布局具有卡片的效果,常用于展示某个条目的详细信息。CardView 可以嵌套在 RecyclerView 中使用,实现列表中每个条目都是卡片的效果,同时也可以添加点击事件和动画效果。 在使用 RecyclerViewCardView 实现列表展示的时候,我们需要先创建一个 RecyclerView,并设置相应的布局管理器和适配器适配器需要继承 RecyclerView.Adapter 类,实现相应的方法,以便于渲染每个条目的数据。在适配器中,我们可以创建一个 ViewHolder,用来缓存每个条目的 View。 然后,我们需要创建一个 CardView,用来展示每个条目的数据。在 CardView 中,我们可以添加图片、文字、按钮等控件,来展示每个条目的详细信息。同时,我们也可以给 CardView 设置点击事件,以便于用户点击后跳转到相应的界面。 最后,我们需要将适配器设置到 RecyclerView 中,让 RecyclerView 显示我们的列表。在适配器中,我们还可以添加一些动画效果,让列表更加生动有趣。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值