Я создал простую анимацию в CustomView для перехода к видам деятельности. Все отлично, за исключением анимации. При увеличении радиуса круга появляются видимые лаги. Как я могу повысить производительность, чтобы избежать задержек?Android - актерская анимация на холсте
public class CircleAnimationView extends View {
...
public void startAnimation(int x, int y) {
startX = x;
startY = y;
baseAnimator = ObjectAnimator.ofFloat(this, "baseRadius", 0, maxRadius)
.setDuration(1000);
baseAnimator
.setInterpolator(new AccelerateDecelerateInterpolator());
baseAnimator.start();
finalAnimator = ObjectAnimator.ofFloat(this, "finalRadius", 0, maxRadius)
.setDuration(2000);
finalAnimator
.setInterpolator(new AccelerateDecelerateInterpolator());
if(listener!=null)
finalAnimator.addListener(listener);
finalAnimator.start();
}
public void setBaseRadius(final float radius) {
radiusBase = radius;
invalidate();
}
public void setFinalRadius(final float radius) {
radiusFinal = radius;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (isInEditMode()) {
return;
}
canvas.drawCircle(startX, startY, radiusBase, basePaint);
canvas.drawCircle(startX, startY, radiusFinal, finalPaint);
}
};
Я использовал представление в XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
</RelativeLayout>
<pl.org.ldi.challenge.views.CircleAnimationView
android:id="@+id/circle_animation"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:base_color="@color/blue"
app:final_color="@color/white"/>
</RelativeLayout>
Edit: я проверяю .trace файл с анимации, и это выглядит, что рисование большого круг занимает слишком много времени - метод GLES20Canvas.nDrawDisplayList
попытался использовать AnimatorSet, чтобы воспроизвести их вместе? – pskink
да, без разницы – koliczyna
попробовал только одну анимацию? вы уверены, что startAnimation() не вызывается дважды или более раз? – pskink