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