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; 1983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.view.View; 2083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 2183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarclass CardViewApi21 implements CardViewImpl { 2283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 2383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 2483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public void initialize(CardViewDelegate cardView, Context context, int backgroundColor, 25bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar float radius, float elevation, float maxElevation) { 26bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar final RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, radius); 27bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar cardView.setBackgroundDrawable(backgroundDrawable); 2883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar View view = (View) cardView; 2983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar view.setClipToOutline(true); 3018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar view.setElevation(elevation); 31bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar setMaxElevation(cardView, maxElevation); 3283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 3383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 3483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 3583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public void setRadius(CardViewDelegate cardView, float radius) { 3683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar ((RoundRectDrawable) (cardView.getBackground())).setRadius(radius); 3783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 3883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 3983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 4083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public void initStatic() { 4183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 4283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 4383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar @Override 4418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public void setMaxElevation(CardViewDelegate cardView, float maxElevation) { 45bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar ((RoundRectDrawable) (cardView.getBackground())).setPadding(maxElevation, 46c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar cardView.getUseCompatPadding(), cardView.getPreventCornerOverlap()); 47bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar updatePadding(cardView); 4818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 4918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 5018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 5118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMaxElevation(CardViewDelegate cardView) { 52bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar return ((RoundRectDrawable) (cardView.getBackground())).getPadding(); 5318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 5418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 5518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 5618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMinWidth(CardViewDelegate cardView) { 5718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar return getRadius(cardView) * 2; 5818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 5918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 6018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 6118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getMinHeight(CardViewDelegate cardView) { 6218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar return getRadius(cardView) * 2; 6318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 6418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 6518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 6683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar public float getRadius(CardViewDelegate cardView) { 6783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar return ((RoundRectDrawable) (cardView.getBackground())).getRadius(); 6883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar } 6983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar 7018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 7118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public void setElevation(CardViewDelegate cardView, float elevation) { 7218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar ((View) cardView).setElevation(elevation); 7318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 7418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 7518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar @Override 7618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar public float getElevation(CardViewDelegate cardView) { 7718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar return ((View) cardView).getElevation(); 7818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar } 7918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar 80bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar @Override 81bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar public void updatePadding(CardViewDelegate cardView) { 82c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar if (!cardView.getUseCompatPadding()) { 83bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar cardView.setShadowPadding(0, 0, 0, 0); 84bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar return; 85bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 86bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar float elevation = getMaxElevation(cardView); 87bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar final float radius = getRadius(cardView); 88bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar int hPadding = (int) Math.ceil(RoundRectDrawableWithShadow 89c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar .calculateHorizontalPadding(elevation, radius, cardView.getPreventCornerOverlap())); 90bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar int vPadding = (int) Math.ceil(RoundRectDrawableWithShadow 91c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar .calculateVerticalPadding(elevation, radius, cardView.getPreventCornerOverlap())); 92bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar cardView.setShadowPadding(hPadding, vPadding, hPadding, vPadding); 93bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 94bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar 95bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar @Override 96bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar public void onCompatPaddingChanged(CardViewDelegate cardView) { 97bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar setMaxElevation(cardView, getMaxElevation(cardView)); 98bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar } 99bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar 100c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar @Override 101c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar public void onPreventCornerOverlapChanged(CardViewDelegate cardView) { 102c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar setMaxElevation(cardView, getMaxElevation(cardView)); 103c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar } 1044eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar 1054eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar @Override 1064eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar public void setBackgroundColor(CardViewDelegate cardView, int color) { 1074eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar ((RoundRectDrawable) (cardView.getBackground())).setColor(color); 1084eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar } 10983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar}