android+switch+动画,android – 为什么SwitchPreference在从开启切换到关闭时不显示动画,反之亦然?...
时间: 2023-12-09 22:05:58 浏览: 264
Android切换动画
Android中SwitchPreference默认情况下不会显示动画效果,这是因为SwitchPreference内部并没有对开关状态的切换进行动画处理。但是你可以通过使用属性动画来实现自定义的动画效果。
你可以在SwitchPreference的OnPreferenceChangeListener中监听开关状态的变化,然后通过属性动画来实现开关状态的切换动画。例如,你可以使用ValueAnimator来改变SwitchCompat的Thumb位置和状态,从而实现开关状态切换时的动画效果。
以下是一个简单的示例代码,可以让SwitchPreference在开关状态切换时显示动画效果:
```
switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean isChecked = (Boolean) newValue;
SwitchCompat switchCompat = (SwitchCompat) preference.findViewById(android.R.id.switch_widget);
if (switchCompat != null) {
float thumbPosition = isChecked ? 1 : 0;
float thumbAlpha = isChecked ? 1 : 0;
ValueAnimator thumbAnimator = ValueAnimator.ofFloat(switchCompat.getThumbPosition(), thumbPosition);
thumbAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
switchCompat.setThumbPosition((Float) animation.getAnimatedValue());
}
});
thumbAnimator.start();
ObjectAnimator thumbAlphaAnimator = ObjectAnimator.ofFloat(switchCompat.getThumbDrawable(), "alpha", switchCompat.getThumbDrawable().getAlpha(), thumbAlpha * 255);
thumbAlphaAnimator.start();
}
return true;
}
});
```
在此代码中,我们通过ValueAnimator和ObjectAnimator来改变SwitchCompat的Thumb位置和透明度,实现开关状态切换时的动画效果。在实际使用中,你可以根据需求自定义动画效果。
阅读全文