Android - 有没有办法用动画切换 ActionBar 图标?

标签 android animation android-actionbar android-actionbar-compat

我的应用程序中有一个 DrawerLayoutActionBar 中有一个自定义图标。打开菜单时,图标不可见。再次关闭菜单后,图标会重新出现。现在,它只是显示\立即消失。我想为图标添加淡入淡出动画。有什么办法可以达到这种效果吗?

此代码当前用于切换图标:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    if(!drawerOpened){
        inflater.inflate(R.menu.chats_activity_action, menu);
    } else {
        actionBar.setDisplayUseLogoEnabled(false);
    }
    return true;
}

这是在 XML 文件中定义图标的方式:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/menu_filter"
        android:title="Add a user"
        app:showAsAction="always"
        android:icon="@drawable/plus_icon"/>
</menu>

最佳答案

首先,使 MenuItem 在您的布局中不可见:

<item
    android:id="@+id/menu_filter"
    android:title="Add a user"
    app:showAsAction="always"
    android:icon="@drawable/plus_icon"
    android:visible="false"/> <!-- New attribute -->

然后修改你的onCreateOptionsMenu:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    if(!drawerOpened){
        inflater.inflate(R.menu.chats_activity_action, menu);

        final MenuItem item = menu.findItem(R.id.menu_filter);

        // Post delayed so the view can be built,
        // otherwise findViewById(R.id.menu_filter) would be null
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
                animation.setDuration(1000);

                // Make item visible and start the animation
                item.setVisible(true);
                findViewById(R.id.menu_filter).startAnimation(animation);
            }
        }, 1);
    } else{
        actionBar.setDisplayUseLogoEnabled(false);


        inflater.inflate(R.menu.chats_activity_action, menu);
        final MenuItem item = menu.findItem(R.id.menu_filter);
        item.setVisible(true);

        // Post delayed so the view can be built,
        // otherwise findViewById(R.id.menu_filter) would be null
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                AlphaAnimation animation = new AlphaAnimation(0.1f, 0.0f);
                animation.setFillEnabled(true);
                animation.setFillAfter(true);
                animation.setDuration(1000);

                // start the animation
                findViewById(R.id.menu_filter).startAnimation(animation);
            }
        }, 1);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                item.setVisible(false);
            }
        }, 1000); // The animation is finished after 1000ms
    }
    return true;
 }

基本上,即使抽屉打开,元素也会充气。之后,该项目会随着动画淡出并在动画结束后设置为不可见。

关于Android - 有没有办法用动画切换 ActionBar 图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493107/

相关文章:

java - Android 初学者 : Ads at the Bottom of the XML

java - 如何在 Android Q 中检查互联网连接?

android - 在多个 View 上同步动画

ios - 动画饼图填充模式?

JavaScript动画库...推荐

android - Action 栏文字颜色

Android:在 list 中设置导航需要根父级

android - 当我使用 android :windowSoftInputMode ="adjustPan" 时,操作栏被隐藏

java - 约束布局admob问题

java - 均衡另一个应用程序的音频 - 如何做?