自定义视图动画在模拟器上流畅,但在真实设备上不稳定
Custom View animations are smooth on emulators but choppy on real devices
我一直在为 android app
开发自定义视图,
我添加了动画,发现它们在 emulators
上很流畅,但在真实 phone;
上很粗糙
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();
}
这些是我使用的动画,任何帮助表示赞赏。
尝试调整动画持续时间。尝试增加动画持续时间。因为在真实设备上渲染比模拟器快。
因此,如果有人想弄清楚这个问题,这就是我为解决该问题所做的工作。我将所有位图分配移至 onSizeChanged 方法。现在,每次我在这些动画中调用 invalidate 时,它都不必重新绘制大型位图,并且周围更加平滑。
我一直在为 android app
开发自定义视图,
我添加了动画,发现它们在 emulators
上很流畅,但在真实 phone;
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();
}
这些是我使用的动画,任何帮助表示赞赏。
尝试调整动画持续时间。尝试增加动画持续时间。因为在真实设备上渲染比模拟器快。
因此,如果有人想弄清楚这个问题,这就是我为解决该问题所做的工作。我将所有位图分配移至 onSizeChanged 方法。现在,每次我在这些动画中调用 invalidate 时,它都不必重新绘制大型位图,并且周围更加平滑。