2015-03-25 4 views
4

У меня есть толстый круг с прозрачным центром:Анимирует ширину хода имеет форму

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="@android:color/transparent"/> 
    <stroke 
     android:width="24dp" 
     android:color="@android:color/white"/> 
    <size 
     android:width="72dp" 
     android:height="72dp"/> 
</shape> 

и хотел бы, чтобы оживить снижение стоимости хода, так что прозрачный центр расширяясь, как радужки.

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <objectAnimator 
     android:propertyName="????" 
     android:valueFrom="24dp" 
     android:valueTo="4dp" 
     android:duration="750" 
     /> 
</set> 

... но я не знаю, что указать в качестве названия свойства. «strokeWidth», похоже, не работает. Я даже не знаю, как это сделать программно, потому что GradientDrawable.setStroke() требует как ширины, так и цвета, а objectAnimator может работать только с одиночными параметрами.

ответ

5

Доступны только объекты, которые можно оживить с помощью аниматора объектов here. Это можно сделать во многих отношениях одним из самых простых:

Создайте форму программно и установите значение с помощью ValueAnimator, вы можете создать ValueAnimator of float и добавить UpdateListener, чтобы в каждом тике вы могли установить вас размер хода Я оставлю вам пример.

Пример:

final ShapeDrawable circle = new ShapeDrawable(new OvalShape()); 

//Create your shape programatically 
ValueAnimator animation = ValueAnimator.ofFloat(24.0f,12.0f); 
animation.setDuration(1000); 
animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      circle.getPaint().setStrokeWidth((Float)animation.getAnimatedValue()); 
     } 
}); 

пример изменит вашу ширину обводки от 24 до 12 в секунду, вы можете изучить больше информации в ValueAnimator и ShapeDrawable APIs, также смотрели here, удачи.