自定义视图动画在模拟器上很流畅但在实际设备上却不稳定

时间:2017-12-27 09:52:32

标签: java android android-layout android-animation android-custom-view

我一直致力于android app的自定义视图, 我添加了动画,发现它们在emulators上很平滑但在真实手机上很粗糙;

Emulator Animation

Device Animation

它在gif中并不那么明显,但仿真器更加平滑。如果有帮助,使用的设备是Galaxy Note 5.

 public void animateLayout(){
    ValueAnimator valueAnimator = ValueAnimator.ofInt(25,displayHeight -initHeight);
    valueAnimator.setDuration(1000);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            layoutParams = new RelativeLayout.LayoutParams(getWidth(), initHeight + (int) animation.getAnimatedValue());
            setLayoutParams(layoutParams);
        }
    });
    valueAnimator.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            gameViewVisible = true;
            animateArc();
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
    if(gameViewVisible == false) {
        valueAnimator.start();
    }


}

public void animateArc(){
    ValueAnimator valueAnimator = ValueAnimator.ofInt(0,achievmentProgress);
    valueAnimator.setDuration(achievmentProgress*(int)4.7);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            achievmentDegrees = (int)animation.getAnimatedValue();
            invalidate();


        }
    });
    valueAnimator.start();
}

这些是我使用的动画,任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

尝试调整动画持续时间。尝试增加动画持续时间。因为在真实设备上渲染比模拟器更快。

答案 1 :(得分:0)

因此,如果有人想要解决这个问题,那么我在这里解决了这个问题。我将所有位图分配移动到onSizeChanged方法。现在,每当我在这些动画中调用invalidate时,它都不需要重绘大型位图并且更加平滑。