在android中,使用ObjectAnimator为自定义视图(ViewHierarchy中的叶节点)设置动画是不平滑



我在一个基于幻灯片的应用程序中工作,并使用自定义RelativeLayout创建了一个形状,这是我的应用程序的一个非常深入的节点(在viewHierarchy中的位置大约是第90级)。形状是幻灯片的内容。当尝试使用ObjectAnimator或ViewPropertyAnimator对形状的平移、旋转或缩放属性设置动画时。动画不平滑。它的闪烁。

这是示例代码剪切

PropertyValuesHolderpvhTX、pvhTY;PropertyValuesHolder.ofFloat(View.TRANLATION_X,translateXFrom,translateXTo);

pvhTY=PropertyValuesHolder.ofFloat(View.TRANSLATION_Y,translateYFrom,translateYTo);

anim1=ObjectAnimator.PropertyValuesHolder(形状,pvhTX,pvhTY);

anim1.setDuration((long)(animData.getDetail().getDuration()*1000));//根据我的要求,添加监听器来覆盖onAnimationStart、onAnimationEnd。anim1.addListener(新的AnimationListener(shape,animData,slideEventHandler));

anim1.start();

在上面的代码中形状是一个自定义视图(custome relativalyout),它可以是任何几何形状,如线、圆、立方体、三角形等。

请帮帮我!!!

可能您在设置动画的视图中使用了一些图像,或者它移动了一些正在设置动画的图像。如果您为它们使用了可绘制的文件夹,请尝试将它们移动到可绘制的nodpi文件夹。Coz当你使用可绘制的目录时,它每次都会进行dpi转换,因此在制作动画时可能会导致低性能。

这是样品:

public static void applyAnimation(Context context, View view, int animationResource, int animationOffsetMilisec){
Animation anim = android.view.animation.AnimationUtils.loadAnimation(context, animationResource);
anim.setStartOffset(animationOffsetMilisec);
anim.setFillAfter(true);
if(view != null) {
view.setAnimation(anim);
view.startAnimation(anim);
}
}

然后sample_animation.xml添加到res.anim.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="4000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:startOffset="0"
android:toDegrees="360"
android:interpolator="@android:anim/linear_interpolator"/>
<scale
android:duration="100"
android:fromXScale="0.0"
android:toXScale="1.1"
android:toYScale="1.1"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/accelerate_interpolator"/>
<!--<alpha-->
<!--android:fromAlpha="0.0"-->
<!--android:toAlpha="1.0"-->
<!--android:duration="1000" />-->
<scale
android:duration="100"
android:fromXScale="1.1"
android:toXScale="0.91"
android:toYScale="0.91"
android:fromYScale="1.1"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="100"
android:interpolator="@android:anim/accelerate_interpolator"/>

</set>

用法:

applyAnimation(context, yourview, R.anim.sample_animation, 0);

最新更新