使用ObjectAnimator动画自定义视图(ViewHierarchy中的叶子节点)在android中并不流畅

时间:2016-05-25 08:42:13

标签: android animation

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

以下是示例代码片段

016-05-25 13:45:11+0530 [scrapy] INFO: Enabled item pipelines: 2016-05-25 13:45:11+0530 [PfData] INFO: Spider opened 2016-05-25 13:45:11+0530 [PfData] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2016-05-25 13:45:11+0530 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 2016-05-25 13:45:11+0530 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080 2016-05-25 13:45:11+0530 [PfData] INFO: Closing spider (finished) 2016-05-25 13:45:11+0530 [PfData] INFO: Dumping Scrapy stats: {'finish_reason': 'finished', 'finish_time': datetime.datetime(2016, 5, 25, 8, 15, 11, 343313), 'log_count/DEBUG': 2, 'log_count/INFO': 7, 'start_time': datetime.datetime(2016, 5, 25, 8, 15, 11, 341872)} 2016-05-25 13:45:11+0530 [PfData] INFO: Spider closed (finished) pvhTX,pvhTY; PropertyValuesHolder.ofFloat(View.TRANSLATION_X,translateXFrom,translateXTo);

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

anim1 = ObjectAnimator.ofPropertyValuesHolder(shape,pvhTX,pvhTY);

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

anim1.start();

在上面的代码中 Shape是一个customeView(custome relativlayout),它可以是任何几何形状,如线圆三角形等。

请帮帮我!!!

1 个答案:

答案 0 :(得分:0)

可能您正在使用视图中的一些图像进行动画制作,或者它会移动一些动画效果的图像。如果你使用drawable文件夹,然后尝试将它们移动到文件夹drawable-nodpi。因为当你使用drawable dir时,每次都会进行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);