Как заставить пользовательского аниматора работать в Котлине (анимация свойства alpha) - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу анимировать свойство ALPHA на ImageView с помощью AnimatorSet (на самом деле у меня есть две анимации, но сейчас я использую только альфа-одну, чтобы проверить, работает ли она)Я использую Kotlin (и я новичок в этом), у меня есть макет с ImageView внутри, XML с классом AnimatorSet и Kotlin, связанный с макетом.

Здесьнекоторые варианты, которые я уже пробовал, все они в методе onCreate и использовании Kotlin extensions:

mLogo.post {
        slideUpAndFadeIn = AnimatorInflater.loadAnimator(this, 
R.animator.slide_up_and_fade_in) as AnimatorSet
        slideUpAndFadeIn.duration = 250
        slideUpAndFadeIn.setTarget(mLogo)
        slideUpAndFadeIn.start()
}

mLogo.animate().apply {
        interpolator = LinearInterpolator()
        duration = 500
        alpha(1f)
        startDelay = 1000
        start()
    }

val objectAnimator = ObjectAnimator.ofFloat(mLogo, View.ALPHA, 0.0f, 1.0f)
    objectAnimator.duration = 250
    objectAnimator.interpolator = AccelerateDecelerateInterpolator()
    objectAnimator.start()

Этокод, который у меня есть сейчас:

MainActivity.kt

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    private lateinit var slideUpAndFadeIn : AnimatorSet

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    slideUpAndFadeIn = AnimatorInflater.loadAnimator(this, 
    R.animator.slide_up_and_fade_in) as AnimatorSet
    slideUpAndFadeIn.duration = 250
    slideUpAndFadeIn.setTarget(mLogo)
    slideUpAndFadeIn.start()
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:gravity="center">

    <ImageView
        android:id="@+id/mLogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/main_logo"
        android:layout_margin="@dimen/dimen_margin_main_logo"
        android:visibility="invisible"/>

</LinearLayout>

slide_up_and_fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
    <objectAnimator
        android:propertyName="translationY"
        android:valueFrom="1"
        android:valueTo="50"
        android:valueType="intType"
        android:interpolator="@android:interpolator/fast_out_linear_in"/>

<objectAnimator
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:valueType="floatType"/>
</set>

Приложение не аварийно завершает работу, поэтому нет исключения NullPointerException, но анимация не работает.Это никогда не "исчезает".Любая помощь приветствуется:)

1 Ответ

0 голосов
/ 04 февраля 2019

«видимость» и «альфа» - это разные атрибуты.Поскольку вы анимируете альфа, вы должны использовать android:alpha="0" в макете XML вместо android:visibility="invisible"

...