我在项目中添加了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>
menu.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个静态图像的菜单,我只想为其中一个制作动画。
任何帮助将不胜感激,提前感谢
答案 0 :(得分:1)
bottomView.menu.getItem(i).icon = AnimatedVectorDrawableCompat.create(this, R.drawable.menPlay)
var anim = bottomView.menu.getItem(i).icon as Animatable
anim.start()
答案 1 :(得分: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四个有用的图书馆。