文章目录
源码地址
1.CardView概念
CardView继承自FramLayout,可以设置圆角和阴影,能够使控件更加立体性.
2.CardView的基本属性
android:cardBackgroundColor 设置背景
android:cardCornerRadius 设置圆角
app:cardElevation 设置阴影大小
app:cardMaxElevation 设置阴影的最大高度
app:contentPadding 内容距离边界的距离(ps:padding在CardView中不生效)
app:contentPaddingXXX 设置局部的内边距
3.app:cardUseCompatPadding和app:cardPreventCornerOverlap属性
- app:cardUseCompatPadding 主要在Android5.0及以上系统上起作用(CardView在5.0以下默认会添加一个额外的padding值);此属性设置为false5.0以上系统不会添加padding,如果为true,则5.0以上系统也会添加padding值,效果会和5.0以下系统一样
- app:cardPreventCornerOverlap 主要在Android5.0以下系统起作用(CardView在5.0及以上系统默认会裁剪content来适应圆角);此属性设置为false,不会裁剪content,圆角会被覆盖,如果设置为true,则会裁剪内容,由于5.0以下默认会添加padding值
4.仿写的进阶之路上的源码(xml的CardView中没有添加属性)
没有录制gif,来张截图吧
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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.text.ck.cardview.MainActivity">
<android.support.v7.widget.CardView
android:id="@+id/cardView"
app:cardCornerRadius="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:cardBackgroundColor="@color/colorAccent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/banner_service" />
</android.support.v7.widget.CardView>
<SeekBar
android:id="@+id/sb_1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="控制圆角大小" />
<SeekBar
android:id="@+id/sb_2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="控制阴影大小" />
<SeekBar
android:id="@+id/sb_3"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="控制图片间距" />
</LinearLayout>
activity
package com.text.ck.cardview;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.util.Log;
import android.widget.SeekBar;
public class MainActivity extends AppCompatActivity {
private SeekBar sb_1;
private SeekBar sb_2;
private SeekBar sb_3;
private CardView cardView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cardView = (CardView) findViewById(R.id.cardView);
sb_1 = (SeekBar) findViewById(R.id.sb_1);
sb_2 = (SeekBar) findViewById(R.id.sb_2);
sb_3 = (SeekBar) findViewById(R.id.sb_3);
sbClick();
}
private void sbClick() {
sb_1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.d("tag",String.valueOf(i));
cardView.setRadius(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
sb_2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.d("tag",String.valueOf(i));
cardView.setCardElevation(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
sb_3.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.d("tag",String.valueOf(i));
cardView.setContentPadding(i,i,i,i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}