diff options
| -rw-r--r-- | core/java/android/widget/Switch.java | 18 | ||||
| -rw-r--r-- | graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java | 9 |
2 files changed, 25 insertions, 2 deletions
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java index 8b97329646b4..a8980849af43 100644 --- a/core/java/android/widget/Switch.java +++ b/core/java/android/widget/Switch.java @@ -208,7 +208,13 @@ public class Switch extends CompoundButton { final TypedArray a = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.Switch, defStyleAttr, defStyleRes); mThumbDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_thumb); + if (mThumbDrawable != null) { + mThumbDrawable.setCallback(this); + } mTrackDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_track); + if (mTrackDrawable != null) { + mTrackDrawable.setCallback(this); + } mTextOn = a.getText(com.android.internal.R.styleable.Switch_textOn); mTextOff = a.getText(com.android.internal.R.styleable.Switch_textOff); mShowText = a.getBoolean(com.android.internal.R.styleable.Switch_showText, true); @@ -433,7 +439,13 @@ public class Switch extends CompoundButton { * @attr ref android.R.styleable#Switch_track */ public void setTrackDrawable(Drawable track) { + if (mTrackDrawable != null) { + mTrackDrawable.setCallback(null); + } mTrackDrawable = track; + if (track != null) { + track.setCallback(this); + } requestLayout(); } @@ -468,7 +480,13 @@ public class Switch extends CompoundButton { * @attr ref android.R.styleable#Switch_thumb */ public void setThumbDrawable(Drawable thumb) { + if (mThumbDrawable != null) { + mThumbDrawable.setCallback(null); + } mThumbDrawable = thumb; + if (thumb != null) { + thumb.setCallback(this); + } requestLayout(); } diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java index f7584d8ff85a..d78138bc3614 100644 --- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java @@ -91,7 +91,8 @@ public class AnimatedStateListDrawable extends StateListDrawable { if (visible) { mTransition.start(); } else { - mTransition.stop(); + // Ensure we're showing the correct state when visible. + jumpToCurrentState(); } } @@ -140,7 +141,11 @@ public class AnimatedStateListDrawable extends StateListDrawable { protected boolean onStateChange(int[] stateSet) { final int keyframeIndex = mState.indexOfKeyframe(stateSet); if (keyframeIndex == getCurrentIndex()) { - // No transition needed. + // Propagate state change to current keyframe. + final Drawable current = getCurrent(); + if (current != null) { + return current.setState(stateSet); + } return false; } |