CardView improvements
Incraese bottom shadow
Use paddings as big as shadows instead of corner radius
Move shadow size to a dimen for clarity
Fixed documentation
Bug: 15139142
Change-Id: I78e321e7f669dfa48b016601390d474fb6b256de
diff --git a/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java b/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
index 9f6014f..98be3c5 100644
--- a/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
+++ b/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
@@ -34,7 +34,7 @@
* A rounded rectangle drawable which also includes a shadow around.
*/
class RoundRectDrawableWithShadow extends Drawable {
-
+ final static float SHADOW_MULTIPLIER = 1.5f;
/*
* This helper is set by CardView implementations.
* <p>
@@ -55,7 +55,7 @@
Path mCornerShadowPath;
- float mShadowSize = 6;
+ float mShadowSize;
private boolean mDirty = true;
@@ -66,6 +66,8 @@
RoundRectDrawableWithShadow(Resources resources, int backgroundColor, float radius) {
mShadowStartColor = resources.getColor(R.color.cardview_shadow_start_color);
mShadowEndColor = resources.getColor(R.color.cardview_shadow_end_color);
+ mShadowSize = resources.getDimension(R.dimen.cardview_shadow_size) * SHADOW_MULTIPLIER;
+
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mPaint.setColor(backgroundColor);
@@ -90,11 +92,9 @@
@Override
public boolean getPadding(Rect padding) {
- if (mCornerRadius == 0) {
- return super.getPadding(padding);
- }
- final int intCornerRadius = (int) Math.ceil(mCornerRadius);
- padding.set(intCornerRadius, intCornerRadius, intCornerRadius, intCornerRadius);
+ final int topShadow = (int) Math.ceil(mShadowSize * (1 / (SHADOW_MULTIPLIER * 2)));
+ final int sideShadow = (int) Math.ceil(mShadowSize - topShadow);
+ padding.set(sideShadow, topShadow, sideShadow, (int) Math.ceil(mShadowSize));
return true;
}
@@ -124,11 +124,16 @@
mDirty = false;
}
drawShadow(canvas);
- final float offset = mShadowSize / 2f;
+ final float offset = mShadowSize * (1 - 1 / (SHADOW_MULTIPLIER * 2));
+ final float horizontalOffset = mShadowSize - offset;
canvas.translate(0, -offset);
mPreShadowBounds.bottom += offset;
+ mPreShadowBounds.left -= horizontalOffset;
+ mPreShadowBounds.right += horizontalOffset;
sRoundRectHelper.drawRoundRect(canvas, mPreShadowBounds, mCornerRadius, mPaint);
mPreShadowBounds.bottom -= offset;
+ mPreShadowBounds.left += horizontalOffset;
+ mPreShadowBounds.right -= horizontalOffset;
canvas.translate(0, offset);
}
diff --git a/v7/cardview/res/values/colors.xml b/v7/cardview/res/values/colors.xml
index 1b6f2d4..3ed7087 100644
--- a/v7/cardview/res/values/colors.xml
+++ b/v7/cardview/res/values/colors.xml
@@ -15,8 +15,10 @@
-->
<resources>
- <!-- Default background color for CardView. -->
+ <!-- Background color for light CardView. -->
<color name="cardview_light_background">#FFFAFAFA</color>
+ <!-- Background color for dark CardView. -->
+ <color name="cardview_dark_background">#FF202020</color>
<!-- Shadow color for the first pixels around CardView. -->
<color name="cardview_shadow_start_color">#37000000</color>
<!-- Shadow color for the furthest pixels around CardView. -->
diff --git a/v7/cardview/res/values/dimens.xml b/v7/cardview/res/values/dimens.xml
index e4ca6f0..5fbd42a 100644
--- a/v7/cardview/res/values/dimens.xml
+++ b/v7/cardview/res/values/dimens.xml
@@ -19,4 +19,6 @@
<dimen name="cardview_default_radius">2dp</dimen>
<!-- Elevation value to use for CardViews on L+. -->
<dimen name="cardview_elevation">2dp</dimen>
+ <!-- Shadow size for CardView on pre L. -->
+ <dimen name="cardview_shadow_size">2dp</dimen>
</resources>
\ No newline at end of file
diff --git a/v7/cardview/res/values/styles.xml b/v7/cardview/res/values/styles.xml
index 12fa3a8..f8a7909 100644
--- a/v7/cardview/res/values/styles.xml
+++ b/v7/cardview/res/values/styles.xml
@@ -14,8 +14,13 @@
limitations under the License.
-->
<resources>
- <style name="CardViewLight">
+ <style name="CardView">
<item name="cardBackgroundColor">@color/cardview_light_background</item>
- <item name="cardCornerRadius">@dimen/cardview_default_radius</item>
+ </style>
+ <style name="CardView.Light">
+ <item name="cardBackgroundColor">@color/cardview_light_background</item>
+ </style>
+ <style name="CardView.Dark">
+ <item name="cardBackgroundColor">@color/cardview_dark_background</item>
</style>
</resources>
\ No newline at end of file
diff --git a/v7/cardview/src/android/support/v7/widget/CardView.java b/v7/cardview/src/android/support/v7/widget/CardView.java
index 5c1af68..03f494f 100644
--- a/v7/cardview/src/android/support/v7/widget/CardView.java
+++ b/v7/cardview/src/android/support/v7/widget/CardView.java
@@ -17,7 +17,6 @@
package android.support.v7.widget;
import android.content.Context;
-import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Build;
import android.support.v7.cardview.R;
@@ -35,7 +34,7 @@
* intersection.
*
* @attr ref android.support.v7.cardview.R.styleable#CardView_cardBackgroundColor
- * @attr ref android.support.v7.cardview.R.styleable#CardView_cornerRadius
+ * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
*/
public class CardView extends FrameLayout implements CardViewDelegate {
@@ -68,7 +67,7 @@
private void initialize(Context context, AttributeSet attrs, int defStyleAttr) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CardView, defStyleAttr,
- R.style.CardViewLight);
+ R.style.CardView_Light);
int backgroundColor = a.getColor(R.styleable.CardView_cardBackgroundColor, 0);
float radius = a.getDimension(R.styleable.CardView_cardCornerRadius, 0);
@@ -81,7 +80,7 @@
*
* @param radius The radius in pixels of the corners of the rectangle shape
*
- * @attr ref android.support.v7.cardview.R.styleable#CardView_cornerRadius
+ * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
*
* @see #setRadius(float)
*
@@ -100,4 +99,4 @@
public float getRadius() {
return IMPL.getRadius(this);
}
-}
\ No newline at end of file
+}