ShadowHelperApi21.java revision f4acd3cf076435ce836a6d4a9027b73ec3050def
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14package android.support.v17.leanback.widget; 15 16import android.support.v17.leanback.R; 17import android.content.res.Resources; 18import android.graphics.Color; 19import android.graphics.Outline; 20import android.graphics.drawable.ColorDrawable; 21import android.graphics.drawable.Drawable; 22import android.view.ViewGroup; 23import android.view.View; 24import android.view.ViewOutlineProvider; 25 26class ShadowHelperApi21 { 27 28 static class ShadowImpl { 29 ViewGroup mShadowContainer; 30 float mNormalZ; 31 float mFocusedZ; 32 } 33 34 static final ViewOutlineProvider sOutlineProvider = new ViewOutlineProvider() { 35 @Override 36 public void getOutline(View view, Outline outline) { 37 outline.setRect(0, 0, view.getWidth(), view.getHeight()); 38 outline.setAlpha(1.0f); 39 } 40 }; 41 42 /* add shadows and return a implementation detail object */ 43 public static Object addDynamicShadow( 44 ViewGroup shadowContainer, float unfocusedZ, float focusedZ, boolean roundedCorners) { 45 if (roundedCorners) { 46 RoundedRectHelperApi21.setRoundedRectBackground(shadowContainer, 47 Color.TRANSPARENT); 48 } else { 49 shadowContainer.setOutlineProvider(sOutlineProvider); 50 } 51 ShadowImpl impl = new ShadowImpl(); 52 impl.mShadowContainer = shadowContainer; 53 impl.mNormalZ = unfocusedZ; 54 impl.mFocusedZ = focusedZ; 55 shadowContainer.setZ(impl.mNormalZ); 56 shadowContainer.setTransitionGroup(true); 57 return impl; 58 } 59 60 /* set shadow focus level 0 for unfocused 1 for fully focused */ 61 public static void setShadowFocusLevel(Object object, float level) { 62 ShadowImpl impl = (ShadowImpl) object; 63 impl.mShadowContainer.setZ(impl.mNormalZ + level * (impl.mFocusedZ - impl.mNormalZ)); 64 } 65 66 public static void setZ(View view, float z) { 67 view.setZ(z); 68 } 69} 70