2

我在BottomNavigationView我的项目中添加了一个动画,我想向其中一个菜单项添加动画。这个动画是一个AnimationDrawable,基本上是一系列图像。我已经完成了以下操作,但没有成功,我知道如何实现这一点,或者尝试替代方法吗?

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/lytMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/lytContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="?attr/actionBarSize" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/nav"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_alignParentBottom="true"
        android:background="@color/white"
        app:menu="@menu/menu" />

</RelativeLayout>

菜单.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menShow"
        android:enabled="true"
        android:icon="@drawable/headphones"
        android:title="@string/menu_listen"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/menSearch"
        android:enabled="true"
        android:icon="@drawable/search"
        android:title="@string/menu_search"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/menPlay"
        android:enabled="true"
        android:icon="@drawable/play_anim"
        android:title="@string/menu_play"
        app:showAsAction="ifRoom" />
</menu>

play_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/play_anim"
    android:oneshot="false">
    <item
        android:drawable="@drawable/vis_f1"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f2"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f3"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f4"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f5"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f6"
        android:duration="100" />
    <item
        android:drawable="@drawable/vis_f7"
        android:duration="100" />
</animation-list>

MainActivity.java:

BottomNavigationView bottomView = (BottomNavigationView) findViewById(R.id.nav);

MenuItem menuItem = (MenuItem) bottomView.findViewById(R.id.menPlay);

AnimationDrawable animation = (AnimationDrawable)menuItem.getIcon();

animation.start();

到目前为止的结果是带有 3 个静态图像的菜单,我只想为其中一个设置动画。

任何帮助将不胜感激,在此先感谢

4

2 回答 2

1
bottomView.menu.getItem(i).icon = AnimatedVectorDrawableCompat.create(this, R.drawable.menPlay)
var anim = bottomView.menu.getItem(i).icon as Animatable
anim.start()
于 2018-08-20T09:34:47.480 回答
0

我会回应自己的。我找到了一个使用 BottomNavigationBar 的第三方库的解决方案:ButtomBar它非常简单且功能强大,但是我如何解决我的问题是执行以下操作:

MainActivity.java:

private AppCompatImageView appCompatImageView;
private AnimationDrawable animationDrawable;
private BottomBar navBottom;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    navBottom = (BottomBar) findViewById(R.id.navBottom);

    appCompatImageView = (AppCompatImageView) navBottom.getTabAtPosition(Constants.BOTTOM_BAR_ANIMATION).getChildAt(0);
    animationDrawable = (AnimationDrawable) appCompatImageView.getDrawable();

    if(shouldStartAnimation())
    {
        if(!animationDrawable.isRunning())
        {
            animationDrawable.start();
        }
    }
    else
    {
        animationDrawable.stop();
    }
}

public boolean shouldStartAnimation()
{
    //Add some condition in here
    return true;
}

main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/lytMain"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/lytContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="?attr/actionBarSize" />

<com.roughike.bottombar.BottomBar
    android:id="@+id/navBottom"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:layout_alignParentBottom="true"
    android:background="@color/black"
    app:bb_activeTabColor="@drawable/sbs_menu_selector"
    app:bb_behavior="iconsOnly"
    app:bb_tabXmlResource="@xml/bottombar_items" />

我已经将菜单项的drawable转换为AppCompatImageView,然后为了得到它的animationDrawable,我只是简单地做了appCompatImageView.getDrawable(),就是这样,然后你可以根据需要启动/停止动画drawable。

请注意, shouldStartAnimation 是一种方法,应放置您的条件。

希望这可以帮助某人。

PS:感谢roughike 4 有用的图书馆。

于 2017-05-31T02:02:16.910 回答