CardView.java revision 18ef68d444a1c059041bf5b683eb612ffed22ea9
183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar/*
283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Copyright (C) 2014 The Android Open Source Project
383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * you may not use this file except in compliance with the License.
683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * You may obtain a copy of the License at
783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
1083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Unless required by applicable law or agreed to in writing, software
1183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
1283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * See the License for the specific language governing permissions and
1483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * limitations under the License.
1583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar */
1683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
1783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarpackage android.support.v7.widget;
1883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
1983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.content.Context;
2083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.content.res.TypedArray;
2118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyarimport android.graphics.Rect;
2283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.os.Build;
2383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.support.v7.cardview.R;
2483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.util.AttributeSet;
2583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.widget.FrameLayout;
2683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
2783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar/**
2818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * A FrameLayout with a rounded corner background and shadow.
2983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * <p>
3083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * CardView uses <code>elevation</code> property on L for shadows and falls back to a custom shadow
3183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * implementation on older platforms.
3283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * <p>
3318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * Due to expensive nature of rounded corner clipping, on platforms before L, CardView does not
3418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * clip its children that intersect with rounded corners. Instead, it adds padding to avoid such
3583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * intersection.
3618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * <p>
3718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * Before L, CardView adds padding to its content and draws shadows to that area. This padding
3818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * amount is equal to {@link #getMaxCardElevation()} on the sides and
3918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * <code>1.5 * {@link #getMaxCardElevation()}</code> on top and bottom. Since padding is used to
4018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * offset content for shadows, you cannot set custom padding on CardView.
4118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * <p>
4218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * To change CardView's elevation in a backward compatible way, use
4318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * {@link #setCardElevation(float)}. CardView will use elevation API on L and before L, it will
4418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * change the shadow size. To avoid moving the View while shadow size is changing, shadow size is
4518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * clamped by {@link #getMaxCardElevation()}. If you want to change elevation dynamically, you
4618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * should call {@link #setMaxCardElevation(float)} when CardView is initialized.
4783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
4883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * @attr ref android.support.v7.cardview.R.styleable#CardView_cardBackgroundColor
49bc943f7fa746c149c5e4c3a4eed7febe494d5df5Yigit Boyar * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
5018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * @attr ref android.support.v7.cardview.R.styleable#CardView_cardElevation
5118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar * @attr ref android.support.v7.cardview.R.styleable#CardView_cardMaxElevation
5283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar */
5383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarpublic class CardView extends FrameLayout implements CardViewDelegate {
5483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
5583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    private final static CardViewImpl IMPL;
5618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
5783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    static {
5883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        if ("L".equals(Build.VERSION.CODENAME) || Build.VERSION.SDK_INT >= 21) {
5983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar            IMPL = new CardViewApi21();
6083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        } else if (Build.VERSION.SDK_INT >= 17) {
6183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar            IMPL = new CardViewJellybeanMr1();
6283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        } else {
6383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar            IMPL = new CardViewEclairMr1();
6483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        }
6583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        IMPL.initStatic();
6683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
6783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
6883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public CardView(Context context) {
6983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        super(context);
7083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        initialize(context, null, 0);
7183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
7283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
7383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public CardView(Context context, AttributeSet attrs) {
7483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        super(context, attrs);
7583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        initialize(context, attrs, 0);
7683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
7783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
7883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public CardView(Context context, AttributeSet attrs, int defStyleAttr) {
7983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        super(context, attrs, defStyleAttr);
8083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        initialize(context, attrs, defStyleAttr);
8183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
8283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
8318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    private Rect mShadowRect = new Rect();
8418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
8518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
8618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
8718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        if (IMPL instanceof CardViewApi21 == false) {
8818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
8918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            int extraWidth = 0;
9018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            int extraHeight = 0;
9118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            switch (widthMode) {
9218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.EXACTLY:
9318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.AT_MOST:
9418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    final int minWidth = (int) Math.ceil(IMPL.getMinWidth(this));
9518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    widthMeasureSpec = MeasureSpec.makeMeasureSpec(Math.max(minWidth,
9618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                            MeasureSpec.getSize(widthMeasureSpec)), widthMode);
9718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    break;
9818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.UNSPECIFIED:
9918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    extraWidth = mShadowRect.left + mShadowRect.right;
10018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    break;
10118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            }
10218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
10318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
10418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            switch (heightMode) {
10518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.EXACTLY:
10618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.AT_MOST:
10718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    final int minHeight = (int) Math.ceil(IMPL.getMinHeight(this));
10818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.max(minHeight,
10918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                            MeasureSpec.getSize(heightMeasureSpec)), heightMode);
11018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    break;
11118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                case MeasureSpec.UNSPECIFIED:
11218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    extraHeight = mShadowRect.top + mShadowRect.bottom;
11318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                    break;
11418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            }
11518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
11618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            if (extraWidth != 0 || extraHeight != 0) {
11718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                setMeasuredDimension(getMeasuredWidth() + extraWidth,
11818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar                        getMeasuredHeight() + extraHeight);
11918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            }
12018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        } else {
12118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
12218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        }
12318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
12418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
12518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
12683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    private void initialize(Context context, AttributeSet attrs, int defStyleAttr) {
12783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CardView, defStyleAttr,
128bc943f7fa746c149c5e4c3a4eed7febe494d5df5Yigit Boyar                R.style.CardView_Light);
12983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        int backgroundColor = a.getColor(R.styleable.CardView_cardBackgroundColor, 0);
13083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        float radius = a.getDimension(R.styleable.CardView_cardCornerRadius, 0);
13118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        float elevation = a.getDimension(R.styleable.CardView_cardElevation, 0);
13218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        float maxElevation = a.getDimension(R.styleable.CardView_cardMaxElevation, 0);
13318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        if (elevation > maxElevation) {
13418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar            maxElevation = elevation;
13518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        }
13683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        a.recycle();
13718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
13818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        IMPL.initialize(this, context, backgroundColor, radius, elevation, maxElevation);
13983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
14083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
14183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    /**
14283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * Updates the corner radius of the CardView.
14383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     *
14483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * @param radius The radius in pixels of the corners of the rectangle shape
145bc943f7fa746c149c5e4c3a4eed7febe494d5df5Yigit Boyar     * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
14683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * @see #setRadius(float)
14783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     */
14883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public void setRadius(float radius) {
14983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        IMPL.setRadius(this, radius);
15083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
15183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
15283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    /**
15383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * Returns the corner radius of the CardView.
15483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     *
15583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * @return Corner radius of the CardView
15683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     * @see #getRadius()
15783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar     */
15883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public float getRadius() {
15983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        return IMPL.getRadius(this);
16083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
16118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
16218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    /**
16318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * Updates the backward compatible elevation of the CardView.
16418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     *
16518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @param radius The backward compatible elevation in pixels.
16618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @attr ref android.support.v7.cardview.R.styleable#CardView_cardElevation
16718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #getCardElevation()
16818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #setMaxCardElevation(float)
16918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     */
17018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public void setCardElevation(float radius) {
17118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        IMPL.setElevation(this, radius);
17218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
17318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
17418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    /**
17518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * Returns the backward compatible elevation of the CardView.
17618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     *
17718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @return Elevation of the CardView
17818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #setCardElevation(float)
17918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #getMaxCardElevation()
18018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     */
18118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getCardElevation() {
18218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        return IMPL.getElevation(this);
18318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
18418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
18518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    /**
18618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * Updates the backward compatible elevation of the CardView.
18718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * <p>
18818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * Calling this method has no effect if device OS version is L or newer.
18918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     *
19018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @param radius The backward compatible elevation in pixels.
19118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @attr ref android.support.v7.cardview.R.styleable#CardView_cardElevation
19218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #setCardElevation(float)
19318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #getMaxCardElevation()
19418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     */
19518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public void setMaxCardElevation(float radius) {
19618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        IMPL.setMaxElevation(this, radius);
19718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
19818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
19918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    /**
20018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * Returns the backward compatible elevation of the CardView.
20118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * <p>
20218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * If device OS version is L or newer, this method returns 0.
20318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     *
20418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @return Elevation of the CardView
20518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #setMaxCardElevation(float)
20618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     * @see #getCardElevation()
20718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar     */
20818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getMaxCardElevation() {
20918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        return IMPL.getMaxElevation(this);
21018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
211bc943f7fa746c149c5e4c3a4eed7febe494d5df5Yigit Boyar}
212