CardView

簡(jiǎn)介

Android 5.0版本中新增了CardView,CardView繼承自FrameLayout類(lèi),可以在一個(gè)卡片布局中一致性的顯示內(nèi)容,卡片可以包含圓角和陰影椿息。也可以布局其他View。Google用一句話(huà)介紹了CardView:一個(gè)帶圓角和陰影背景的FrameLayout。
請(qǐng)注意:CardView被包裝為一種布局铺然,并且經(jīng)常在ListView和RecyclerView的Item布局中,作為一種容器使用酒甸。
在AndroidStudio配置android.support.v7包:
在Gradle中添加CardView包的依賴(lài)即可進(jìn)行使用:
compile 'com.android.support:cardview-v7:21.0.+'

1.CardView常用屬性
card_view:cardElevation 陰影的大小(設(shè)置z軸陰影)
card_view:cardMaxElevation 陰影最大高度(設(shè)置z軸最大高度值)
card_view:cardBackgroundColor 卡片的背景色
card_view:cardCornerRadius 卡片的圓角大小(半徑)
card_view:contentPadding 卡片內(nèi)容于邊距的間隔
card_view:contentPaddingBottom 卡片內(nèi)容與底部的邊距
card_view:contentPaddingTop 卡片內(nèi)容與頂部的邊距
card_view:contentPaddingLeft 卡片內(nèi)容與左邊的邊距
card_view:contentPaddingRight 卡片內(nèi)容與右邊的邊距
card_view:contentPaddingStart 卡片內(nèi)容于邊距的間隔起始
card_view:contentPaddingEnd 卡片內(nèi)容于邊距的間隔終止
card_view:cardUseCompatPadding 設(shè)置內(nèi)邊距魄健,V21+的版本和之前的版本仍舊具有一樣的計(jì)算方式(是否使用CompadPadding)
card_view:cardPreventConrerOverlap 在V20和之前的版本中添加內(nèi)邊距,這個(gè)屬性為了防止內(nèi)容和邊角的重疊(是否使用PreventCornerOverlap)

使用

1)普通使用效果
<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:layout_margin="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="普通使用效果"
            android:textColor="#000000"
            android:textSize="20sp" />
</android.support.v7.widget.CardView>

2)增加背景色和圓角的效果,注意我們此時(shí)使用background屬性是沒(méi)效果的:
<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        app:cardBackgroundColor="@color/colorPrimary"
        app:cardCornerRadius="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:layout_margin="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="添加背景色及圓角"
            android:textColor="#000000"
            android:textSize="20sp" />
</android.support.v7.widget.CardView>

3)設(shè)置z軸陰影
<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        app:cardBackgroundColor="@color/colorAccent"
        app:cardCornerRadius="10dp"
        app:cardElevation="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:layout_margin="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="設(shè)置z軸陰影"
            android:textColor="#000000"
            android:textSize="20sp" />
</android.support.v7.widget.CardView>

4)Ripple效果:點(diǎn)擊時(shí)的漣漪效果
<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground"
        app:cardBackgroundColor="@color/colorAccent"
        app:cardCornerRadius="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:layout_margin="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="Ripple效果"
            android:textColor="#000000"
            android:textSize="20sp" />
</android.support.v7.widget.CardView>

5)lift_on_touch:Cards插勤、Button等視圖應(yīng)該有一個(gè)觸摸抬起(lift-on-touch)的交互效果沽瘦,也就是在三維立體空間上的Z軸發(fā)生位移革骨,從而產(chǎn)生一個(gè)陰影加深的效果,與Ripple效果共同使用.
<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground"
        android:stateListAnimator="@drawable/lift_on_touch"
        app:cardBackgroundColor="@color/cardview_light_background"
        app:cardCornerRadius="10dp"
        tools:targetApi="LOLLIPOP">//tools:targetApi寫(xiě)不寫(xiě)都行
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:layout_margin="10dp"
            android:gravity="center_horizontal|center_vertical"
            android:padding="10dp"
            android:text="lift_on_touch"
            android:textColor="#000000"
            android:textSize="20sp" />
</android.support.v7.widget.CardView>

  @drawable/lift_on_touch:在res/drawable目錄下創(chuàng)建lift_on_touch.xml文件,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_pressed="true">
        <set>
            <objectAnimator 
                android:duration="@android:integer/config_shortAnimTime" 
                android:propertyName="translationZ" 
                android:valueTo="6dp" 
                android:valueType="floatType" />
        </set>
    </item>
    <item>
        <set>
            <objectAnimator 
                android:duration="@android:integer/config_shortAnimTime" 
                android:propertyName="translationZ" 
                android:valueTo="0" 
                android:valueType="floatType" />
        </set>
    </item>
</selector>

注意

lift-on-touch效果實(shí)現(xiàn):
    即通過(guò)屬性動(dòng)畫(huà)動(dòng)態(tài)改變translationZ值析恋,沿著Z軸良哲,從0dp到6dp變化。然后將其賦值給 android:stateListAnimator 屬性即可助隧。由于 stateListAnimator 屬性只適用于Lollipop及以上版本筑凫,為了隱藏xml中的版本警告,可以指定 tools:targetApi="lollipop" 并村。
    關(guān)于這個(gè)功能巍实,需要補(bǔ)充說(shuō)明一點(diǎn)。這里的 lift_on_touch.xml 橘霎,嚴(yán)格意義上來(lái)講蔫浆,屬于anim資源,同時(shí)適用于API 21及以上版本姐叁,所以按道理上來(lái)講應(yīng)該將其放置在 res/anim-v21 目錄下瓦盛,然后使用 @anim/lift_on_touch 賦值給 stateListAnimator 屬性,而不是例子中的 @drawable/lift_on_touch 方法外潜。但是放置在 res/anim-v21 目錄下會(huì)產(chǎn)生一個(gè)“錯(cuò)誤”提示:
    XML file should be in either “animator” or “drawable”,not “anim”
    雖然這個(gè)“錯(cuò)誤”不影響編譯運(yùn)行原环,但是對(duì)于追求完美主義的程序員們來(lái)說(shuō)還是礙眼,所以本例中我選擇將其放在了 res/drawable 目錄下处窥,大家可以自行斟酌使用嘱吗。

下面是具體實(shí)現(xiàn)效果
主布局寫(xiě)

package com.example.mycardview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

  ListView listView;
  ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    init();
  }

  void init() {
    for (int i = 0; i < 20; i++) {
      HashMap<String, String> map = new HashMap<>();
      map.put("title", "我是標(biāo)題" + i);
      map.put("data", "我是內(nèi)容" + i);
      arrayList.add(map);
    }
    listView = (ListView) findViewById(R.id.listview);
    listView.setAdapter(new MyAdapter());
  }

  class MyAdapter extends BaseAdapter {

    @Override
    public int getCount() {
      return arrayList.size();
    }

    @Override
    public Object getItem(int i) {
      return arrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
      return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
      View v = View.inflate(MainActivity.this,R.layout.adapter,null);
      TextView txTitle = v.findViewById(R.id.textView);
      txTitle.setText(arrayList.get(i).get("title"));
      TextView txData = v.findViewById(R.id.textView2);
      txData.setText(arrayList.get(i).get("data"));
      return v;
    }
  }
}

主xml寫(xiě)

<?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" xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.mycardview.MainActivity">

  <ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

重點(diǎn)是適配器

<?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"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="100dp"
  android:orientation="vertical"
  tools:gravity="center_vertical">
  <android.support.v7.widget.CardView
    android:clickable="true"
    android:foreground="?attr/selectableItemBackground"
    android:stateListAnimator="@drawable/lift_on_touch"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:background="@drawable/back"
    app:cardBackgroundColor="@color/colorAccent"
    app:cardCornerRadius="15dp">

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="horizontal">
      <ImageView
        android:id="@+id/imageView"
        android:layout_width="80dp"
        android:layout_height="80dp"
        app:srcCompat="@mipmap/ic_launcher" />
      <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="vertical"
        tools:gravity="center_vertical">
        <TextView
          android:id="@+id/textView2"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="TextView"
          android:textSize="30sp" />
        <TextView
          android:id="@+id/textView"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="TextView"
          android:textSize="18sp" />
      </LinearLayout>
    </LinearLayout>
  </android.support.v7.widget.CardView>
</LinearLayout>
cardview和RecylerView效果圖.png
cv設(shè)置z軸陰影效果圖.png
cv增加背景色和圓角的效果.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滔驾,隨后出現(xiàn)的幾起案子谒麦,更是在濱河造成了極大的恐慌,老刑警劉巖哆致,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绕德,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡摊阀,警方通過(guò)查閱死者的電腦和手機(jī)耻蛇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胞此,“玉大人臣咖,你說(shuō)我怎么就攤上這事∈#” “怎么了夺蛇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)酣胀。 經(jīng)常有香客問(wèn)我蚊惯,道長(zhǎng)愿卸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任截型,我火速辦了婚禮,結(jié)果婚禮上儒溉,老公的妹妹穿的比我還像新娘宦焦。我一直安慰自己,他們只是感情好顿涣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布波闹。 她就那樣靜靜地躺著,像睡著了一般涛碑。 火紅的嫁衣襯著肌膚如雪精堕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天蒲障,我揣著相機(jī)與錄音歹篓,去河邊找鬼。 笑死揉阎,一個(gè)胖子當(dāng)著我的面吹牛庄撮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毙籽,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼洞斯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坑赡?” 一聲冷哼從身側(cè)響起烙如,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毅否,沒(méi)想到半個(gè)月后亚铁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搀突,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年刀闷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仰迁。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甸昏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徐许,到底是詐尸還是另有隱情施蜜,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布雌隅,位于F島的核電站翻默,受9級(jí)特大地震影響缸沃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜修械,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一趾牧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肯污,春花似錦翘单、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柬唯,卻和暖如春认臊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锄奢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工失晴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斟薇。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓师坎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親堪滨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胯陋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評(píng)論 25 707
  • CardView簡(jiǎn)介 CardView繼承自FrameLayout類(lèi)。 CardView是一種卡片視圖袱箱,主要是以卡...
    上善若水Ryder閱讀 33,976評(píng)論 9 52
  • 簡(jiǎn)介 CardView 是 Android 5.0 引進(jìn)的一種卡片式布局控件遏乔,是一個(gè)帶有圓角和陰影效果的Frame...
    Whyn閱讀 2,498評(píng)論 0 11
  • #大標(biāo)題# -測(cè)試 -啊啊啊
    謝慕安閱讀 85評(píng)論 0 1
  • 這周花了快三天的時(shí)間看完霍比特人和魔戒三部曲, 看完后對(duì)西方奇幻電影有了濃厚的興趣(初高中喜歡看東方的玄幻小說(shuō)題材...
    rivir閱讀 477評(píng)論 0 1