如何使用ObjectAnimator为BottomNavigationView菜单项图标设置动画

问题描述 投票:2回答:1

我正在使用Android支持设计BottomNavigationView进行底部标签导航。

 <android.support.design.widget.BottomNavigationView
        android:id="@+id/main_nav"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        app:labelVisibilityMode="unlabeled"
        app:itemIconSize="40dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        app:itemBackground="@color/blue_active"
        app:menu="@menu/nav_items">


    </android.support.design.widget.BottomNavigationView>

我想做的是:

在按下ObjectAnimator时以编程方式对选项卡(菜单)图标进行动画处理

这是菜单:

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

    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_home"
        android:title="@string/nav_home" />
    <item
        android:id="@+id/nav_games"
        android:icon="@drawable/games"
        android:title="@string/nav_games" />
    <item
        android:id="@+id/nav_profile"
        android:icon="@drawable/profile"
        android:title="@string/nav_profile" />
</menu>

代码:

 mMainNav.setOnNavigationItemSelectedListener { item ->
            when (item.itemId) {
                R.id.nav_home -> {

                   //item.icon is drawable
                   var myAnimation =  ObjectAnimator.ofFloat(item.icon,"rotation",0f,360f)
                    myAnimation.duration = 500


                    myAnimation.start()  //nothing happens
                    setFragment(HomeFragment)

                    true
                }

没有这种动画就不会发生动画。

怎么了?我应该使用其他方式制作动画还是只是将其错误地使用了?

[我尝试使用可绘制的图标对imageview进行动画处理,然后将其设置为actionview,但这也不起作用。(会发生一些反应,但会产生一些无关紧要的怪异行为)

 var drawable = applicationContext.getDrawable(R.drawable.ic_home)
                    var someImageView = ImageView(this)
                    someImageView.setImageDrawable(drawable)

                   var myAnimation =  ObjectAnimator.ofFloat(someImageView,"rotation",0f,100f)
                    myAnimation.duration = 2000


                    myAnimation.start()
                    item.actionView = someImageView

赏金链接已损坏,请检查以下内容:https://streamable.com/99pa8

我正在使用Android支持设计BottomNavigationView进行底部标签导航。

android android-animation
1个回答
0
投票

尝试一下:

mMainNav.setOnNavigationItemSelectedListener { item ->
            when (item.itemId) {
                R.id.nav_home -> {
                   val anim = myAnim(view,targetHeight)
                   anim.duration = /*whatever you want*/
                   view.startAnimation(anim)
                   ObjectAnimator.ofFloat(item.icon,"rotation",0f,360f).apply{
                    duration = 500
                    start()  //nothing happens
                    setFragment(HomeFragment)
                    }
                }
© www.soinside.com 2019 - 2024. All rights reserved.