CardV我是一个布局控件,
1、CardView需要引入support包的v7和cardview。
2、在布局或者Java代码中新建对象。
3、在布局或代码中加入想要的圆角和阴影。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".MainActivity">
<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_width="400dp"
android:layout_height="400dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="52dp"
android:layout_marginEnd="8dp"
app:cardCornerRadius="11dp"
android:layout_marginRight="8dp"
android:foreground="@drawable/forground"
app:layout_constraintBottom_toTopOf="@+id/seekBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srcCompat="@drawable/divider" />
</android.support.v7.widget.CardView>
<SeekBar
android:id="@+id/seekBar"
android:layout_width="300dp"
android:layout_height="30dp"
android:layout_marginTop="16dp"
android:max="100"
app:layout_constraintBottom_toTopOf="@+id/seekBar2"
app:layout_constraintEnd_toStartOf="@+id/textView"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cardView" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radius"
app:layout_constraintBottom_toBottomOf="@+id/seekBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/seekBar"
app:layout_constraintTop_toTopOf="@+id/seekBar" />
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="300dp"
android:layout_height="30dp"
android:layout_marginTop="16dp"
android:max="100"
app:layout_constraintBottom_toTopOf="@+id/seekBar3"
app:layout_constraintEnd_toStartOf="@+id/textView2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/seekBar" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="shadow"
app:layout_constraintBottom_toBottomOf="@+id/seekBar2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/seekBar2"
app:layout_constraintTop_toTopOf="@+id/seekBar2" />
<SeekBar
android:id="@+id/seekBar3"
android:layout_width="300dp"
android:layout_height="30dp"
android:layout_marginTop="16dp"
android:max="100"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textView3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/seekBar2" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="padding"
app:layout_constraintBottom_toBottomOf="@+id/seekBar3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/seekBar3"
app:layout_constraintTop_toTopOf="@+id/seekBar3" />
</android.support.constraint.ConstraintLayout>
mCardView = findViewById(R.id.cardView);
mSeekBar1 = findViewById(R.id.seekBar);
mSeekBar2 = findViewById(R.id.seekBar2);
mSeekBar3 = findViewById(R.id.seekBar3);
mSeekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mCardView.setRadius(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mSeekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mCardView.setCardElevation(progress/10);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mSeekBar3.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mCardView.setContentPadding(progress,progress,progress,progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
写了两个drawable分别作为边框和里面的ImageView的内容,
divider的
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:angle="135"
android:startColor="#00ff00"
android:centerColor="#ff0000"
android:endColor="#0000ff"
android:type="linear"/>
<size android:width="2dp"
android:height="2dp"/>
</shape>
forground,这是一个给CardView加边界的drawable,注意在CardView的padding中稍微比这个的线条宽多一点,否则拐角会有一点露出。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp"
android:color="#ffff00"/>
<corners android:radius="10dp"/>
<size android:width="22dp"
android:height="22dp"/>
</shape>