CardViewApi21Impl.java revision e7c701f05b4f6afa2913c3743638d7b25b96df83
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 Boyarpackage android.support.v7.widget; 1783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 1883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.content.Context; 19d2c60296856244030e9a92ef3065d3884ac67527Aurimas Liutikasimport android.content.res.ColorStateList; 20d2c60296856244030e9a92ef3065d3884ac67527Aurimas Liutikasimport android.support.annotation.Nullable; 2183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.view.View; 2283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 2383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarclass CardViewApi21 implements CardViewImpl { 2483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 2583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 26d2c60296856244030e9a92ef3065d3884ac67527Aurimas Liutikas public void initialize(CardViewDelegate cardView, Context context, 2786223c8f397daa57fff72d6bd5cf10ceeb74d40eChris Banes ColorStateList backgroundColor, float radius, float elevation, float maxElevation) { 28ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes final RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius); 29ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes cardView.setCardBackground(background); 30ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes 31ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes View view = cardView.getCardView(); 3283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar view.setClipToOutline(true); 3318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar view.setElevation(elevation); 34bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar setMaxElevation(cardView, maxElevation); 3583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 3683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 3783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 3883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public void setRadius(CardViewDelegate cardView, float radius) { 39ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes getCardBackground(cardView).setRadius(radius); 4083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 4183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 4283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 4383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public void initStatic() { 4483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 4583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 4683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 4718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public void setMaxElevation(CardViewDelegate cardView, float maxElevation) { 48ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes getCardBackground(cardView).setPadding(maxElevation, 49c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar cardView.getUseCompatPadding(), cardView.getPreventCornerOverlap()); 50bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar updatePadding(cardView); 5118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 5218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 5318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 5418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMaxElevation(CardViewDelegate cardView) { 55ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes return getCardBackground(cardView).getPadding(); 5618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 5718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 5818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 5918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMinWidth(CardViewDelegate cardView) { 6018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar return getRadius(cardView) * 2; 6118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 6218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 6318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 6418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMinHeight(CardViewDelegate cardView) { 6518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar return getRadius(cardView) * 2; 6618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 6718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 6818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 6983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public float getRadius(CardViewDelegate cardView) { 70ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes return getCardBackground(cardView).getRadius(); 7183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 7283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 7318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 7418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public void setElevation(CardViewDelegate cardView, float elevation) { 75ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes cardView.getCardView().setElevation(elevation); 7618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 7718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 7818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 7918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getElevation(CardViewDelegate cardView) { 80ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes return cardView.getCardView().getElevation(); 8118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 8218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 83bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar @Override 84bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar public void updatePadding(CardViewDelegate cardView) { 85c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar if (!cardView.getUseCompatPadding()) { 86bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar cardView.setShadowPadding(0, 0, 0, 0); 87bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar return; 88bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 89bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar float elevation = getMaxElevation(cardView); 90bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar final float radius = getRadius(cardView); 91bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar int hPadding = (int) Math.ceil(RoundRectDrawableWithShadow 92c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar .calculateHorizontalPadding(elevation, radius, cardView.getPreventCornerOverlap())); 93bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar int vPadding = (int) Math.ceil(RoundRectDrawableWithShadow 94c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar .calculateVerticalPadding(elevation, radius, cardView.getPreventCornerOverlap())); 95bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar cardView.setShadowPadding(hPadding, vPadding, hPadding, vPadding); 96bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 97bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar 98bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar @Override 99bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar public void onCompatPaddingChanged(CardViewDelegate cardView) { 100bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar setMaxElevation(cardView, getMaxElevation(cardView)); 101bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 102bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar 103c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar @Override 104c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar public void onPreventCornerOverlapChanged(CardViewDelegate cardView) { 105c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar setMaxElevation(cardView, getMaxElevation(cardView)); 106c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar } 1074eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar 1084eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar @Override 109d2c60296856244030e9a92ef3065d3884ac67527Aurimas Liutikas public void setBackgroundColor(CardViewDelegate cardView, @Nullable ColorStateList color) { 110ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes getCardBackground(cardView).setColor(color); 111ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes } 112ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes 113e7c701f05b4f6afa2913c3743638d7b25b96df83Aurimas Liutikas @Override 114e7c701f05b4f6afa2913c3743638d7b25b96df83Aurimas Liutikas public ColorStateList getBackgroundColor(CardViewDelegate cardView) { 115e7c701f05b4f6afa2913c3743638d7b25b96df83Aurimas Liutikas return getCardBackground(cardView).getColor(); 116e7c701f05b4f6afa2913c3743638d7b25b96df83Aurimas Liutikas } 117e7c701f05b4f6afa2913c3743638d7b25b96df83Aurimas Liutikas 118ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes private RoundRectDrawable getCardBackground(CardViewDelegate cardView) { 119ffbf42aa3acb41b82cc6c1226c63c3649bedfe49Chris Banes return ((RoundRectDrawable) cardView.getCardBackground()); 1204eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar } 12183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar}