【FastDev4Android框架开发】CardView完全解析与RecyclerView结合使用(三十二)

转载请标明出处:

http://blog.csdn.net/developer_jiangqq/article/details/50000733

本文出自:【江清清的博客】

(一).前言:

作为Android L开始,Google更新的除了RecyclerView之外的另一控件就是CardView,其中Google官方应用Google Now就采用了CardView控件,下面我们详细了解一下CardView和使用方法。

(二).基本介绍:

CardView继承自FrameLayout,可以让我们使用类似卡片布局来显示一致性效果的内容。同时卡片还可以包含圆角和阴影效果。CardView是一个Layout,同时在里边布局其他View控件。如果我们需要创建带有一个阴影效果的卡片,那么可以使用card_view:cardElevation属性。

在API21(Android L)等级以上拥有属性elevation,意为CardView的Z轴阴影,只有L平台有效。只能通过xml中的elevation属性指定;另外我们还可以使用以下的属性来自定义CardView布局:

使用card_view:cardCornerRadius来设置布局的圆角。同样可以使用代码如下的代码设置圆角:CardView.setRadius。对于卡片的背景可以使用card_view:cardBackgroundColor设置。

CardView的其他属性以及作用如下:


card_view:cardElevation


阴影的大小


card_view:cardMaxElevation


阴影最大值


card_view:cardBackgroundCollor


卡片的背景色


card_view:cardCornerRadius


卡片的圆角大小


card_view:contentPadding


卡片内容与边距的间隔


card_view:contentPaddingBottom


卡片内容与底部的间隔


card_view:contentPaddingTop


卡片内容与顶部的间隔


card_view:contentPaddingLeft


卡片内容与左边的间隔


card_view:contentPaddingRight


卡片内容与右边的间隔


card_view:contentPaddingStart


card_view:contentPaddingEnd

(三).CardView组件引入:

我们知道CardView组件是Android L开始引入,同时Google也做了兼容包在V7包里边了,具体我们来看一下项目存在的路径:

       使用Android Studio IDE进行开发的话,我们只需要进行dependencies引入依赖即可:

dependencies {
    compile fileTree(dir: ‘libs‘, include:[‘*.jar‘])
   …….
    compile‘com.android.support:cardview-v7:23.1.1‘
}

(四).CardView基本使用:

下面我们来具体来使用一下,根据上面的讲解我们知道CardView也是一个Layout,那么里边我们也可以加入其他布局,请看实例Demo布局文件,比较简单一看就会了:

<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
    <includelayout="@layout/common_top_bar_layout"/>
    <android.support.v7.widget.CardView
       android:layout_marginTop="3dp"
       android:layout_marginLeft="3dp"
       android:layout_marginRight="3dp"
       android:id="@+id/card_view_one"
       android:layout_gravity="center"
       android:layout_width="match_parent"
        android:layout_height="100dp"
       card_view:cardCornerRadius="5dp">
        <TextView
           android:id="@+id/info_text_one"
           android:text="CardView1测试"
            android:textSize="16sp"
            android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
    <android.support.v7.widget.CardView
       android:layout_marginTop="3dp"
       android:layout_marginLeft="3dp"
       android:layout_marginRight="3dp"
       android:id="@+id/card_view_two"
       android:layout_gravity="center"
       android:layout_width="match_parent"
        android:layout_height="100dp"
       card_view:cardCornerRadius="5dp"
       card_view:cardBackgroundColor="#FFE4B5">
        <TextView
           android:id="@+id/info_text_two"
           android:text="CardView2测试"
            android:textSize="16sp"
            android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
    <android.support.v7.widget.CardView
       android:layout_marginTop="3dp"
       android:layout_marginLeft="3dp"
       android:layout_marginRight="3dp"
       android:id="@+id/card_view_three"
       android:layout_gravity="center"
       android:layout_width="match_parent"
        android:layout_height="100dp"
       card_view:cardCornerRadius="5dp"
       card_view:cardBackgroundColor="#CAE1FF">
        <TextView
           android:id="@+id/info_text_three"
           android:text="CardView3测试"
            android:textSize="16sp"
            android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
    <android.support.v7.widget.CardView
       android:layout_marginTop="3dp"
       android:layout_marginLeft="3dp"
       android:layout_marginRight="3dp"
       android:id="@+id/card_view_four"
       android:layout_gravity="center"
       android:layout_width="match_parent"
        android:layout_height="100dp"
       card_view:cardCornerRadius="5dp"
       card_view:cardBackgroundColor="#7CCD7C"
        card_view:cardElevation="5dp"
       card_view:cardMaxElevation="5dp">
        <TextView
           android:id="@+id/info_text_four"
           android:text="CardView4测试"
            android:textSize="16sp"
            android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

这边定义了四个CardView,同时设置了圆角以及相关背景颜色,其他第四个CardView还设置了阴影效果,具体运行效果如下:

(五).CardView结合RecyclerView:

前面我们实现了RecyclerView实现列表功能了,现在我们把Item View采用CardView来实现,

1.首先我们来看下Item 布局文件:

<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"android:layout_width="match_parent"
   android:layout_height="match_parent">
    <android.support.v7.widget.CardView
       android:id="@+id/item_cardview"
       android:layout_gravity="center"
       android:layout_width="match_parent"
        android:layout_height="100dp"
       card_view:cardCornerRadius="5dp"
       card_view:cardBackgroundColor="#7CCD7C"
        card_view:cardElevation="3dp"
       card_view:cardMaxElevation="5dp">
        <TextView
            android:id="@+id/item_tv"
           android:text="CardView测试"
            android:textSize="16sp"
           android:textColor="#FFFFFF"
            android:gravity="center"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

这个布局比较简单,定义一个CardView,内部包含了一个TextView。

2.自定义的Adapter如下,主要加载布局然后绑定数据:

packagecom.chinaztt.fda.test.CardView;
importandroid.content.Context;
importandroid.support.v7.widget.CardView;
importandroid.support.v7.widget.RecyclerView;
importandroid.text.Layout;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TextView;
importcom.chinaztt.fda.entity.CardDataUtils;
importcom.chinaztt.fda.entity.CardViewBean;
importcom.chinaztt.fda.ui.R;
importjava.util.List;
/**
 * 当前类注释:CardView结合RecyclerView 自定义Adapter
 * 项目名:FastDev4Android
 * 包名:com.chinaztt.fda.test.CardView
 * 作者:江清清 on 15/11/23 19:41
 * 邮箱:[email protected]
 * QQ: 781931404
 * 公司:江苏中天科技软件技术有限公司
 */
public class CardViewAdapter extends RecyclerView.Adapter<CardViewAdapter.ItemCardViewHolder>{
    private List<CardViewBean> beans;
    private LayoutInflater mInflater;
    private Context mContext;
    public CardViewAdapter(Context context){
        this.mContext=context;
        beans=CardDataUtils.getCardViewDatas();
        mInflater=LayoutInflater.from(context);
    }
    @Override
    public ItemCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Viewview=mInflater.inflate(R.layout.item_cardview_layout,parent,false);
        return new ItemCardViewHolder(view);
    }
    @Override
    public void onBindViewHolder(ItemCardViewHolder holder, int position) {
       holder.item_cardview.setCardBackgroundColor(mContext.getResources().getColor(beans.get(position).getColor()));
       holder.item_tv.setText(beans.get(position).getTitle());
    }
    @Override
    public int getItemCount() {
        return beans.size();
    }

    public static class ItemCardViewHolder extends RecyclerView.ViewHolder{
        private CardView item_cardview;
        private TextView item_tv;
        public ItemCardViewHolder(ViewitemView) {
            super(itemView);
           item_cardview=(CardView)itemView.findViewById(R.id.item_cardview);
           item_tv=(TextView)itemView.findViewById(R.id.item_tv);

        }
    }
}

3.数据提供我这边采用一个类,在内边进行构造的:

public class CardDataUtils {
    public static List<CardViewBean> getCardViewDatas(){
        List<CardViewBean> beans=new ArrayList<CardViewBean>();
        int[] colors=newint[]{R.color.color_0,R.color.color_1,
               R.color.color_2,R.color.color_3,R.color.color_4,
               R.color.color_5,R.color.color_6,R.color.color_7,
               R.color.color_8,R.color.color_9,R.color.color_10,};
        for(int i=0;i<11;i++){
            beans.add(new CardViewBean(colors[i],"CardView测试Item"+i));
        }
        return beans;
    }
}

其中里面的11个颜色在,colors文件中定义了:

 <!--cardView 实例中的颜色-->
    <color name="color_0">#FFF0F5</color>
    <color name="color_1">#FFE1FF</color>
    <color name="color_2">#E6E6FA</color>
    <color name="color_3">#C1FFC1</color>
    <color name="color_4">#B22222</color>
    <color name="color_5">#836FFF</color>
    <color name="color_6">#68228B</color>
    <color name="color_7">#5CACEE</color>
    <color name="color_8">#43CD80</color>
    <color name="color_9">#00EE00</color>
    <color name="color_10">#708090</color>

4.主布局文件的代码就不贴了,和以前一样,就是一个RecyclerView控件定义,然后主Activity使用方法代码如下:

packagecom.chinaztt.fda.test.CardView;

importandroid.os.Bundle;
importandroid.support.v7.widget.LinearLayoutManager;
importandroid.support.v7.widget.OrientationHelper;
importandroid.support.v7.widget.RecyclerView;
importandroid.view.View;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;

importcom.chinaztt.fda.ui.R;
importcom.chinaztt.fda.ui.base.BaseActivity;

/**
 * 当前类注释:CardView结合RecyclerView使用实例
 * 项目名:FastDev4Android
 * 包名:com.chinaztt.fda.test.CardView
 * 作者:江清清 on 15/11/23 19:34
 * 邮箱:[email protected]
 * QQ: 781931404
 * 公司:江苏中天科技软件技术有限公司
 */
public class CardViewRecyclerActivity extends BaseActivity {
    private LinearLayout top_bar_linear_back;
    private TextView top_bar_title;
    private RecyclerView recycler_cardview;
    @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.card_view_recycler_layout);
       top_bar_linear_back=(LinearLayout)this.findViewById(R.id.top_bar_linear_back);
       top_bar_linear_back.setOnClickListener(new CustomOnClickListener());
       top_bar_title=(TextView)this.findViewById(R.id.top_bar_title);
       top_bar_title.setText("CardView结合RecyclerView使用实例");

       recycler_cardview=(RecyclerView)this.findViewById(R.id.recycler_cardview);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
       linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
       recycler_cardview.setLayoutManager(linearLayoutManager);
        recycler_cardview.setAdapter(newCardViewAdapter(this));
    }
    class CustomOnClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
           CardViewRecyclerActivity.this.finish();
        }
    }
}

5.运行效果如下:

(六).最后总结

今天我们对于CardView做了基本讲解以及相关使用方法,同时也通过与RecyclerView的结合让我们巩固CardView的使用。CardView控件整体比较简单,相信大家还是比较容易理解,以后的项目中大家就可以使用CardView控件了(例如在新闻列表功能中等)。

本次具体实例注释过的全部代码已经上传到FastDev4Android项目中了。同时欢迎大家去Github站点进行clone或者下载浏览:

https://github.com/jiangqqlmj/FastDev4Android 同时欢迎大家star和fork整个开源快速开发框架项目~

本人录制AA(Android Annotations)注入框架的视频教程已经上线了,欢迎大家前往观看。http://www.cniao5.com/course/10074

时间: 2024-08-03 15:36:51

【FastDev4Android框架开发】CardView完全解析与RecyclerView结合使用(三十二)的相关文章

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridVi

【FastDev4Android框架开发】RecyclerView完全解析之结合AA(Android Annotations)注入框架实例(三十)

(一).前言: 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridView之类控件有很多的优点,例如:数据绑定,Item View创建,View的回收以及重用等机制.本系列文章会包括到以下三个部分: RecyclerView控件的基本使用,包括基础,进阶,高级部分,动画之类(点击进入) RecyclerView控件的实战实例(点击进入) RecyclerView控件集合AA

【FastDev4Android框架开发】RecyclerView完全解析,让你从此爱上它(二十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49927631 本文出自:[江清清的博客] (一).前言: 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridView之类控件有很多的优点,例如:数据绑定,Item View创建,View的回收以及重用等机制.那么今天开始我们来重点学习一下Rec

【FastDev4Android框架开发】RecyclerView完全解析之打造新版类Gallery效果(二十九)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49946589 本文出自:[江清清的博客] (一).前言: 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridView之类控件有很多的优点,例如:数据绑定,Item View创建,View的回收以及重用等机制.本系列文章会包括到以下三个部分: R

【FastDev4Android框架开发】神器ViewGragHelper完全解析之详解实现QQ5.X侧滑酷炫效果(三十四)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50043159 本文出自:[江清清的博客] (一).前言: 这几天正在更新录制实战项目,整体框架是采用仿照QQ5.X侧滑效果的.那么我们一般的做法就是自定义ViewGroup或者采用开源项目MenuDrawer或者Google提供的控件DrawerLayout等方式来实现.这些的控件的很多效果基本上都是采用实现onInterceptTouchEvent和onTouch

【FastDev4Android框架开发】打造QQ6.X最新版本侧滑界面效果(三十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: 这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果.今天我们还是采用神器ViewDragHelper来实现,之前我们以前基于ViewDragHelper的使用和打造QQ5.X效果了,基本使用方法可以点

【FastDev4Android框架开发】Android Design支持库TabLayout打造仿网易新闻Tab标签效果(三十七)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50158985 本文出自:[江清清的博客] (一).前言: 仿36Kr客户端开发过程中,因为他们网站上面的新闻文章分类比较多,所以我这边还是打算模仿网易新闻APP的主界面新闻标签Tab以及页面滑动效果来进行实现.要实现的顶部的Tab标签的效果有很多方法例如采用开源项目ViewPagerIndicator中的TabPageIndicator就可以实现.不过我们今天不讲V

【FastDev4Android框架开发】Android MVP开发模式详解(十九)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49613861 本文出自:[江清清的博客] (一).前言: 今天我们的项目继续更新,今天我们主要讲解MVP开发模式以及具体实例. FastDev4Android框架项目地址:https://github.com/jiangqqlmj/FastDev4Android (二).简介: MVP(Model ViewPresenter)模式是著名的MVC(Model View