Android 棒棒糖中的比例转换
Scale Transition in Android Lollipop
我在 github 项目中发现了这个 Scale transition。但我发现它仍然有缺陷:视图从一开始就可见,然后动画从无到全。预期结果是:视图在动画之前从一开始就不可见。
这是代码:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class Scale extends Visibility {
public Scale(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Scale() {
super();
}
@Override
public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
return createScaleAnimator(view, 0, 1);
}
@Override
public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
return createScaleAnimator(view, 1, 0);
}
public Animator createScaleAnimator(View view, float startScale, float endScale) {
PropertyValuesHolder holderX = PropertyValuesHolder.ofFloat("scaleX", startScale, endScale);
PropertyValuesHolder holderY = PropertyValuesHolder.ofFloat("scaleY", startScale, endScale);
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holderX, holderY);
return animator;
}
}
使用方法如下:
<transition
class="com.jimulabs.googlemusicmock.transition.Scale"
android:startDelay="500">
<targets>
<target android:targetId="@id/fab" />
</targets>
</transition>
幻灯片切换按预期工作,因为它隐藏了动画之前的视图。
有人知道天平 class 出了什么问题吗?谢谢
初始比例应该在createAnimtorScale中设置。
view.setScaleX(startScale);
view.setScaleY(startScale);
否则在动画器运行之前初始比例不会开始。
我在 github 项目中发现了这个 Scale transition。但我发现它仍然有缺陷:视图从一开始就可见,然后动画从无到全。预期结果是:视图在动画之前从一开始就不可见。
这是代码:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class Scale extends Visibility {
public Scale(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Scale() {
super();
}
@Override
public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
return createScaleAnimator(view, 0, 1);
}
@Override
public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
return createScaleAnimator(view, 1, 0);
}
public Animator createScaleAnimator(View view, float startScale, float endScale) {
PropertyValuesHolder holderX = PropertyValuesHolder.ofFloat("scaleX", startScale, endScale);
PropertyValuesHolder holderY = PropertyValuesHolder.ofFloat("scaleY", startScale, endScale);
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holderX, holderY);
return animator;
}
}
使用方法如下:
<transition
class="com.jimulabs.googlemusicmock.transition.Scale"
android:startDelay="500">
<targets>
<target android:targetId="@id/fab" />
</targets>
</transition>
幻灯片切换按预期工作,因为它隐藏了动画之前的视图。
有人知道天平 class 出了什么问题吗?谢谢
初始比例应该在createAnimtorScale中设置。
view.setScaleX(startScale);
view.setScaleY(startScale);
否则在动画器运行之前初始比例不会开始。