Android之RecycleView和CardView

来源:互联网 发布:网络信息抓取软件 合法 编辑:程序博客网 时间:2024/05/22 05:17

Android之RecycleView和CardView

          之前在学习php并且公司交代了一些后台的任务让我练习php的后台开发,这个星期又把app的一些问题做了解决升级,今天难得没有很多的任务就去看了下Android5.0之后的一些改变和新的控件自己学习下,看的很多介绍RecycleView和CardView,我自己就去看了下,一这篇文章来记录自己对上面的控件的使用心得。先来看看相关的类的简介:
  

RecyclerView相关类:

类名说明

RecyclerView.Adapter

可以托管数据集合,为每一项Item创建视图并且绑定数据RecyclerView.ViewHolder承载Item视图的子布局

RecyclerView.LayoutManager

负责Item视图的布局的显示管理RecyclerView.ItemDecoration给每一项Item视图添加子View,可以进行画分隔线之类的东西

RecyclerView.ItemAnimator

负责处理数据添加或者删除时候的动画效果
   刚开始了解没有使用这么多类,主要的就是前三个类的使用,RecycleView和listview 的用法差不多,recycleview是v7包中的,我们使用也很简单,主要就是布局管理器要做好选择:

1 LinearLayoutManager

线性布局,LayoutManager的实现类,类似于实现ListView的风格,一般
ListView只有垂直的方向,而这里可包含两种类型,Vertical和Horizontal

2 GridLayoutManager

格子布局、继承自LinearLayoutManager,实现效果类似GridView

3 StaggeredGridLayoutManager

   瀑布流布局、交错的格子布局、同样也是LayoutManager的实现类,类型包括Vertical和Horizontal,与GridLayoutManager很相似,不过是交错的格子,也就是宽高不等的格子视图、类似瀑布流的效果。

比较蛋疼就是没有提供一些点击监听和长按监听的方法,我们需要掌握他的一些点击和长按事件,对于RecyclerView其本身没有给我们提供这些事件监听,所以,对于这些事件,我们还得自己去实现。 

  这里简单的实现一个瀑布流布局来看下效果:

 protected void initView(){        recyclerView = (RecyclerView) findViewById(R.id.recycle);        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));        recyclerView.setHasFixedSize(true);        adapter = new DemoAdapter(resoures,this);        recyclerView.setAdapter(adapter);    }
  上面一段代码给出了recycleview的初始化,和布局格式,再来看看适配器:
package com.example.luze.myapplication;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.support.v7.widget.RecyclerView;import android.util.DisplayMetrics;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;/** * Created by luze on 2017-05-12. */public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.BaseViewHolder> {    private int[] resus;    private Context context;    public DemoAdapter(int[] resus, Context context) {        this.resus = resus;        this.context = context;    }    @Override    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context,R.layout.recycle_item,null);        return new OneViewHolder(view);    }    @Override    public void onBindViewHolder(BaseViewHolder holder, int position) {       holder.setData(resus[position]);    }    @Override    public int getItemCount() {        return resus.length;    }    public class BaseViewHolder extends RecyclerView.ViewHolder {        public BaseViewHolder(View itemView) {            super(itemView);        }       void setData(Object data){       }    }    public class OneViewHolder extends BaseViewHolder{        private ImageView image ;        public OneViewHolder(View itemView) {            super(itemView);            image = (ImageView) itemView.findViewById(R.id.id_image);            DisplayMetrics metrics = new DisplayMetrics();            ((Activity)(image.getContext())).getWindowManager().getDefaultDisplay().getMetrics(metrics);            int width =metrics.widthPixels;            ViewGroup.LayoutParams params = image.getLayoutParams();            params.width = width/3;            params.height = (int) (200+Math.random()*400);            image.setLayoutParams(params);        }        @Override        void setData(Object data) {            if (data != null){              int ID = (int) data;            image.setImageResource(ID);            }        }    }}
看到适配器的代码和listview就有很大的区别了,不过仔细研究也比较简单,我们需要在ViewHolder中做数据绑定。recycleview就分享到这里,再来看看cardview。

下面我们看看CardView新增了哪些属性:

  • CardView_cardBackgroundColor 设置背景色
  • CardView_cardCornerRadius 设置圆角大小
  • CardView_cardElevation 设置z轴阴影
  • CardView_cardMaxElevation 设置z轴最大高度值
  • CardView_cardUseCompatPadding 是否使用CompadPadding
  • CardView_cardPreventCornerOverlap 是否使用PreventCornerOverlap
  • CardView_contentPadding 内容的padding
  • CardView_contentPaddingLeft 内容的左padding
  • CardView_contentPaddingTop 内容的上padding
  • CardView_contentPaddingRight 内容的右padding
  • CardView_contentPaddingBottom 内容的底padding

card_view:cardUseCompatPadding 设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式

card_view:cardPreventConrerOverlap 在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠

至于cardview的把上面的的几个属性用好就可以,在代码中没有很多的涉及。




   
1 0
原创粉丝点击