Recolor.java revision 1ffb280a7d2c70cc16d709c685f5d31fdb86b5e4
1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/* 2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project 3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License. 6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at 7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software 11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and 14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License. 15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 17d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepackage android.transition; 18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 19faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.animation.Animator; 20faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.animation.ObjectAnimator; 21faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.graphics.drawable.ColorDrawable; 22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.graphics.drawable.Drawable; 23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.View; 24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.widget.TextView; 26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/** 28faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This transition tracks changes during scene changes to the 29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * {@link View#setBackground(android.graphics.drawable.Drawable) background} 30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * property of its target views (when the background is a 31faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * {@link ColorDrawable}, as well as the 32faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * {@link TextView#setTextColor(android.content.res.ColorStateList) 33faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * color} of the text for target TextViews. If the color changes between 34faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * scenes, the color change is animated. 35d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 36d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @hide 37faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 38faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class Recolor extends Transition { 39faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 40faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private static final String PROPNAME_BACKGROUND = "android:recolor:background"; 41faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private static final String PROPNAME_TEXT_COLOR = "android:recolor:textColor"; 42faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 43d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase private void captureValues(TransitionValues transitionValues) { 44d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transitionValues.values.put(PROPNAME_BACKGROUND, transitionValues.view.getBackground()); 45d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (transitionValues.view instanceof TextView) { 46d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transitionValues.values.put(PROPNAME_TEXT_COLOR, 47d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase ((TextView)transitionValues.view).getCurrentTextColor()); 48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 52d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureStartValues(TransitionValues transitionValues) { 53d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase captureValues(transitionValues); 54d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 55d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 56d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 57d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureEndValues(TransitionValues transitionValues) { 58d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase captureValues(transitionValues); 59d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 60d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 61d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 62d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, 63faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase TransitionValues endValues) { 64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (startValues == null || endValues == null) { 652ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase return null; 66faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase final View view = endValues.view; 68faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Drawable startBackground = (Drawable) startValues.values.get(PROPNAME_BACKGROUND); 69faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Drawable endBackground = (Drawable) endValues.values.get(PROPNAME_BACKGROUND); 70faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase boolean changed = false; 71faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (startBackground instanceof ColorDrawable && endBackground instanceof ColorDrawable) { 72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ColorDrawable startColor = (ColorDrawable) startBackground; 73faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ColorDrawable endColor = (ColorDrawable) endBackground; 74faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (startColor.getColor() != endColor.getColor()) { 75faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase endColor.setColor(startColor.getColor()); 76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase changed = true; 771ffb280a7d2c70cc16d709c685f5d31fdb86b5e4George Mount return ObjectAnimator.ofArgb(endBackground, "color", startColor.getColor(), 781ffb280a7d2c70cc16d709c685f5d31fdb86b5e4George Mount endColor.getColor()); 79faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 81faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (view instanceof TextView) { 82faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase TextView textView = (TextView) view; 83faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int start = (Integer) startValues.values.get(PROPNAME_TEXT_COLOR); 84faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int end = (Integer) endValues.values.get(PROPNAME_TEXT_COLOR); 85faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (start != end) { 86faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase textView.setTextColor(end); 87faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase changed = true; 881ffb280a7d2c70cc16d709c685f5d31fdb86b5e4George Mount return ObjectAnimator.ofArgb(textView, "textColor", start, end); 89faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 90faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 912ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase return null; 92faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 93faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 94