2

Я изучал тему анимации на Android, но столкнулся с кирпичной стеной, когда дело доходило до реализации этих результатов в отношении проекта, в котором используется библиотека Percent.Android Animations on Percent Library

В частности, у меня есть следующий элемент в моем макета XML:

<ImageView 
     android:id="@+id/aImage" 
     android:src="@drawable/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_marginTopPercent="35%" 
     android:layout_centerHorizontal="true" 
     android:visibility="invisible"/> 

С ниже атрибута, назначенного корня PercentRelativeLayout элемента:

xmlns:app="http://schemas.android.com/apk/res-auto" 

Теперь я хочу, чтобы создать AnimatorSet объект, который может выполнять множественные манипуляции с фокусом, находящимся в атрибуте app:layout_marginTopPercent="35%".

Я попытался создания ObjectAnimator и добавить его к AnimatorSet, но это не имеет никакого эффекта:

ObjectAnimator anim1 = ObjectAnimator.ofFloat(logoImageView, "layout_marginTopPercent", 0.35f, 0.1f); 
AnimatorSet animatorSet = new AnimatorSet(); 
animatorSet.playSequentially(anim1); 
animatorSet.start(); 

Может кто-нибудь, пожалуйста, объясните, где я неправильно. Интересно, что я могу создать анимационный .xml-файл и использовать элемент translate для успешной анимации, но мне нужно сделать это в коде. Ниже приведен пример успешного .XML анимации:

<set> 
     <translate 
     android:fromYDelta="0%p" 
     android:toYDelta="-25%p" 
     android:duration="1000" /> 
</set> 

Заранее спасибо

+0

Вы можете увидеть что-нибудь, что связано с '' layout_marginTopPercent'' на logcat? – pskink

+0

К сожалению нет. Логарифм не показывает ничего подходящего @pskink – JordanMazurke

+0

ничего о не реализованном методе? aha, установите продолжительность для 'anim1' – pskink

ответ

4

Новая версия (> = 1.3.0) из моей библиотеки ViewPropertyObjectAnimator обеспечивает способ анимации percent параметров из Percent Support Library. Получение ObjectAnimator (которое вы можете использовать внутри своего AnimatorSet) так же просто, как с помощью ViewPropertyAnimator.

ObjectAnimator logoMarginAnimator = 
      ViewPropertyObjectAnimator.animate(logoImageView).topMarginPercent(0.1f).get(); 
AnimatorSet animatorSet = new AnimatorSet(); 
animatorSet.play(logoMarginAnimator); 
animatorSet.start(); 
+0

Просто попробуйте эту библиотеку сейчас, но выглядит впечатляюще – JordanMazurke

+0

Если у вас возникнут какие-либо проблемы (особенно с анимированными параметрами «percent»), пожалуйста, дайте мне знать. –

+2

Это выбор сторонних производителей, но это рекомендуется. Спасибо – JordanMazurke