Android之RecycleView和CardView
2017-05-12 17:23
405 查看
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 | 负责处理数据添加或者删除时候的动画效果 |
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的把上面的的几个属性用好就可以,在代码中没有很多的涉及。
相关文章推荐
- Android 5.0 Design RecycleView
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)
- android--RecycleView.Adapter的初体验
- Android RecycleView(二)——添加分割线
- Android RecycleView(一)
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:8262)
- Android关于小米相册悬浮标题栏、冻结标题栏的实现方式(嵌套型RecycleView)
- Android 5.0+(RecycleView、CardView、Palette)
- android Material Design之 ToolBar+TabLayout+recycleView的效果实现
- Android RecycleView(四)——时间轴
- 支持上下拉刷新的RecycleView,基于androidPullToRefresh
- 解析RecycleView 参考翔哥 android弟博客
- Android 开发之RecycleView的简单使用
- android--RecycleView.Adapter的初体验
- Android - RecycleView 使用 Universal-Image-Loader加载优化
- 开发日记(4):android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4090)数组越界异常
- Android 5.0+(RecycleView、CardView、Palette)
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)
- Android Ui之Recycle View学习
- Android recycleView的研究和探讨