RecyclerView+CardView实现横向卡片式滑动效果

现在来介绍两种控件RecyclerView和CardView,并通过实例将它们结合在一起实现一种横向卡片式滑动效果.

1.RecyclerView

RecyvlerView是android SDK 新增加的一种控件,也被官方推荐代替ListView来使用,因为其具有更好的灵活性和代替性。

2.CardView

CardView是安卓5.0推出的一种卡片式控件,内部封装了许多有用的方法来实现美观效果。

3.如何使用RecylerView和CardView在android studio中

在build.gradle中添加依赖再编辑即可

compile 'com.android.support:recyclerview-v7:25.+'
compile 'com.android.support:cardview-v7:25

4.通过实例,使用两种控件实现横向卡片式滑动效果

建立main.xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       xmlns:app="http://schemas.android.com/apk/res-auto">

  <android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_View"
    >

  </android.support.v7.widget.RecyclerView>

</LinearLayout>

使用过ListView的同学应该知道还需要一个子布局来填充RecyclerView
以下为recyclerView_item.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:app="http://schemas.android.com/apk/res-auto"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/recyclerview_item"
       android:padding="30dp"

  >

  <android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:contentPadding="50dp"
    app:cardCornerRadius="20dp"
    android:clickable="true"

    android:foreground="?android:attr/selectableItemBackground"
    app:cardElevation="@dimen/cardview_compat_inset_shadow"
    app:cardBackgroundColor="@color/cardview_light_background">

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

      <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="作者"
        android:textSize="22dp"/>
    </LinearLayout>

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="114dp"
      >
      <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="
        锄禾日当午,汗滴禾下土"

        android:textSize="22dp"/>
    </LinearLayout>
  </android.support.v7.widget.CardView>
</LinearLayout>

从代码中,我们会发现使用了CardView控件以及在控件中添加简易的两个TextView

现在来介绍CardView的一些常用属性,这也是现在卡片效果的关键所在

card_view:contentPadding 这个可以给你的内容加上padding属性
card_view:cardBackgroundColor这个可以改变cardview的背景
card_view:cardCornerRadius这个可以改变cardview圆角的大小
card_view:cardElevation这个比较难解释,CardView的Z轴阴影,被用来决定阴影的大小以及柔和度,以至于可以逼真的模拟出对于深度效果的描述。说白点可以理解为阴影的大小
andorid:foreground=”?android:attr/selectableItemBackground” 这个可以使CardView被点击后出现波纹效

通过以上常用属性可以使CardView出现各种不同的效果

现在回到Activity中来实现RecyclerView

跟ListView的一样,我们需要写一个适配器,代码如下:

public class recyclerViewadapter extends RecyclerView.Adapter {
  private List<DataBean> lists;
  private Context context;

  public recyclerViewadapter(List<DataBean> lists, Context context) {
    this.lists = lists;
    this.context = context;
  }

  class myholder extends RecyclerView.ViewHolder{

    private TextView tv1,tv2;
    public myholder(View itemView) {
      super(itemView);
      tv1= (TextView) itemView.findViewById(R.id.tv1);
      tv2= (TextView) itemView.findViewById(R.id.tv2);

    }
  }

  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    myholder holder =new myholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,parent,false));
    return holder;
  }

  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Log.d("TAG", "onBindViewHolder: "+lists.get(position).getAutor());
    ((myholder)holder).tv1.setText(lists.get(position).getAutor());
    ((myholder)holder).tv2.setText(lists.get(position).getContent());

  }

  @Override
  public int getItemCount() {
    return lists.size();
  }
}

写一个类继承RecyclerView.Adapter,重写RecyclerView.Adapter的三个重要方法 onBindViewHolder() getItemCount() 和 OncreateViewHolder()

OncreateViewHolder(): 创建新的View,被LayoutManager所调用
OnBindViewHolder():将数据与界面进行绑定
getItemCount() :返回数据的数量

在Activity中,代码如下:

public class Frament1 extends android.support.v4.app.Fragment{

  private Toolbar toolbar1;
  private RecyclerView recycler_view;
  private TextView tv1,tv2;
  private View view;
  private List<DataBean> lists;

  @Override
  public void onAttach(Context context) {

    super.onAttach(context);
  }

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    setHasOptionsMenu(true);
     view = inflater.inflate(R.layout.fragment1, container, false);

    initView();
    initData();
    LinearLayoutManager m=new LinearLayoutManager(getContext());
    m.setOrientation(LinearLayoutManager.HORIZONTAL);
    recycler_view.setLayoutManager(m);
    recyclerViewadapter adapter=new recyclerViewadapter(lists,getContext());
    recycler_view.setAdapter(adapter);

    return view;
  }

  @Override
  public void onResume() {
    super.onResume();

  }

  private void initData() {
    lists=new ArrayList<>();
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));
    lists.add(new DataBean("Smart","青青原上草,一岁一枯荣"));

  }

  private void initView() {
    recycler_view= (RecyclerView) view.findViewById(R.id.recycler_View);
    tv1= (TextView) view.findViewById(R.id.tv1);
    tv2= (TextView) view.findViewById(R.id.tv2);

  }
}

在代码中,我们获取LayoutManager对象,设置其方向为水平方向,并设置RecyclerView的LayoutManager

然后实例化adapter对象,传入上下文和假数据lists,并设置RecyclerView.adapater

 LinearLayoutManager m=new LinearLayoutManager(getContext());
    m.setOrientation(LinearLayoutManager.HORIZONTAL);
    recycler_view.setLayoutManager(m);
    recyclerViewadapter adapter=new recyclerViewadapter(lists,getContext());
    recycler_view.setAdapter(adapter);

到此基本步骤已经完成,运行程序。

以下为运行截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android开发中RecyclerView模仿探探左右滑动布局功能

    我在此基础上优化了部分代码, 添加了滑动回调, 可自定义性更强. 并且添加了点击按钮左右滑动的功能. 据说无图都不敢发文章了. 看图: 1:这种功能, 首先需要自己管理布局 继承 RecyclerView.LayoutManager , 显示自己管理布局, 比如最多显示4个view, 并且都是居中显示. 底部的View还需要进行缩放,平移操作. public class OverLayCardLayoutManager extends RecyclerView.LayoutManager { p

  • android RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载

    本文介绍的库中的侧滑效果借鉴自SwipeMenu,并对SipwMenu的源码做了修改与Bug修复,然后才开发出的SwipeRecyclerView. 需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装.看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已. 本库已经更新了三个版本了,会一直维护下去,根据小伙伴的要求,以后也会添加一些其它功能. SwipeRecyclerView将完美解决这些问题: 以下功能全

  • Android RecyclerView滑动删除和拖动排序

    本篇是接着上面三篇之后的一个对RecyclerView的介绍,这里多说两句,如果你还在使用ListView的话,可以放弃掉ListView了.RecyclerView自动帮我们缓存Item视图(ViewHolder),允许我们自定义各种动作的动画和分割线,允许我们对Item进行一些手势操作.另外,因为Design库的推出大大方便我们编写带有Material风格的App,而ListView是不兼容这个库的,比如滑动的相互协调,只有RecyclerView能做到. 先看本篇内容的效果图: 效果内容主

  • RecyclerView实现探探卡片滑动效果

    这里是一个通过自定义view和自定义RecyclerView的:layoutManager,再结合ItemTouchHelper实现的一个仿探探的卡片滑动的效果: 效果图已经奉上,接下来是代码: 首先是每张图片的布局:item <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto

  • RecyclerView滑动到指定Position的方法

    Question 最近在写 SideBar 的时候遇到一个问题,当执行 Recyclerview 的 smoothScrollToPosition(position) 的时候,Recyclerview 看上去并没有滚动到指定位置. Analysis 当然,这并不是方法的bug,而是 smoothScrollToPosition(position) 的执行效果有三种情况,需要区分. ·目标position在第一个可见项之前 . 这种情况调用smoothScrollToPosition能够平滑的滚动

  • Android中RecyclerView嵌套滑动冲突解决的代码片段

    在纵向RecyclerView嵌套横向RecyclerView时,如果纵向RecyclerView有下拉刷新功能,那么内部的横向RecyclerView的横向滑动体验会很差.(只有纯横向滑动时,才能滑动内部的横向RecyclerView,否则滑动事件就会影响到下拉刷新),添加拦截判断. public class MySwipeRefreshLayout extends SwipeRefreshLayout { private boolean mIsVpDragger; private final

  • Android嵌套RecyclerView左右滑动替代自定义view

    以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一个左右滑动效果 而列表里面也容易,只是需要解决一点小问题,个人认为值得一提的就是高度问题,一般的人采用固定死的高度,可是在列表里面展示和机型的不同,固定死的话很难保证美观,动态的高度才能解决问题的所在 首先在一个列表控件布局上添加一个recyclerview控件 <android.support.v

  • Android实现评论栏随Recyclerview滑动左右移动

    最近在玩一个叫"约会吧"的应用,也是在看直播app,默认下载安装的,安装点进去看这个应用做的不错,就留下来了.然后看他们动态详情页底部有一个效果:Recyclerview滑动到的评论列表的时候,底部点赞那栏会往左滑动,出现一个输入评论的栏:然后下拉到底部的时候输入评论栏会往右滑动,出现点赞栏.详细细节直接来看效果图吧. 其实这种效果现在在应用中还是很常见的,有上拉,toolbar.底部view隐藏,下拉显示,或者像现在约会吧这样左右滑动的效果.而且网上资料现在也有很多,有通过Objec

  • Android 滑动监听RecyclerView线性流+左右划删除+上下移动

    废话不多说了,直接给大家贴代码了.具体代码如下所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wid

  • Android中RecyclerView 滑动时图片加载的优化

    RecyclerView 滑动时的优化处理,在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量来做判断. mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, in

  • Android中RecyclerView实现横向滑动代码

    RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好.本文给大家介绍Android中RecyclerView实现横向滑动代码,一起看看吧. android.support.v7.widget.RecyclerView 功能:RecyclerView横向滑动 控件:<android.support.v7.widget.RecyclerView /> Java类:RecyclerView.GalleryAdap

随机推荐