在Android中创建具有淡入淡出效果的工具栏

时间:2016-06-02 08:25:27

标签: android android-fragments android-animation android-menu

我有一个带有三个标签的活动,其中每个标签不同,并且显示片段片段之间的移动,使用ViewPager。我为每个片段的Toolbar菜单中的片段充气。

当我希望组成每个菜单的项目(显示菜单时)出现淡入淡出效果并随之消失时(当切换到另一个片段并且上面的片段被破坏时),问题出现了。

出现效果,我没有遇到任何问题。在onCreateOptionsMenu ()片段中的FragmentInfoCenter.java方法中实现它并且运行良好,但没有意识到在菜单被销毁之前消失的效果。

我看起来像这样:

Effect menu item between fragments

我试图在onDestroyOptionsMenu ()中引入这个效果,但是我跳了一个错误,说系统无法访问菜单项,因为它是null(显然,因为它是被销毁的菜单)而我还测试过在onOptionsMenuClosed ()方法中实现代码,但它永远不会进入,也就是说,系统从他那里传递。

执行操作的代码片段FragmentInfoCenter.java如下:

public class FragmentInfoCenter extends Fragment {

    private DrawerLayout drawerLayout;
    private Menu menuFade;
    private ImageView iv;

    public FragmentInfoCenter() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_info_center, container, false);
        setHasOptionsMenu(true);
        drawerLayout = ((DrawerLayout) getActivity().findViewById(R.id.drawer_layout));
        // Menu icon that want to apply the fade effect when it is created 
        // and when destroyed.
        iv = (ImageView) inflater.inflate(R.layout.menu_item_change, null);

        return view;
    }

    // Here I have tried to create the effect fade the menu item when 
    // appear, but I appear a telling exception that the menu item is null 
    // because it is already destroyed.
    @Override
    public void onDestroyOptionsMenu() {
        /*Animation fade_out = AnimationUtils.loadAnimation(getContext(), R.anim.fade_out);
        iv.startAnimation(fade_out);
        menuFade.findItem(R.id.option_change).setActionView(iv);*/
        super.onDestroyOptionsMenu();
    }


    // I have also tried to use this method, but the system never enter.
    @Override
    public void onOptionsMenuClosed(Menu menu) {
        super.onOptionsMenuClosed(menu);
        Animation fade_out = AnimationUtils.loadAnimation(getContext(),  R.anim.fade_out);
        iv.startAnimation(fade_out);
        menu.findItem(R.id.option_change).setActionView(iv);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Clean the menu, so that the menus do not accumulate
        if (menu != null) menu.clear();
        // Inflate the menu with the new
        inflater.inflate(R.menu.frag_menu_center, menu);
        // Add the animation icon iv declared in the onCreate() method
        //menuFade = menu;
        Animation fade_in = AnimationUtils.loadAnimation(getContext(),     R.anim.fade_in);
        iv.startAnimation(fade_in);
        menu.findItem(R.id.option_change).setActionView(iv);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                drawerLayout.openDrawer(GravityCompat.START);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

布局menu_item_change.xml我添加了一个名为iv的ImagenView,在我添加动画的onCreateOptionsMenu ()方法中,fade_id menuItem会关联option_change。< / p>

Menu_item_change.xml布局如下:

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@android:style/Widget.ActionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@string/app_name"
    android:src="@drawable/change" />

动画文件fade_in.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="1000" />

与相反的fade_out.xml

一起
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="1000" />

这两个文件位于res/anim文件夹中。

最后,我应用于此片段的菜单如下(文件frag_menu_center.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/option_change"
        android:icon="@drawable/change"
        app:showAsAction="always"
        android:title="@string/action_change" />
    <item
        android:id="@+id/option_edit"
        android:icon="@drawable/edit"
        app:showAsAction="always"
        android:title="@string/action_edit" />

</menu>

我在网上看到的更多内容,我发现在销毁菜单之前没有可以运行的方法,或者关于它的信息非常少。

我只是希望当Tab 2片段更改任何其他片段时,箭头的图标会随着淡入淡出效果消失,我相信这是令人惊讶的,我们无法做到。

注意:我放置的示例(三个标签)可能太长而无法放入所有项目代码,所以为了更清楚,我将link放在哪里可以卸载示例项目,准备导出到Android Stuido,从而更清楚地看到我得到的内容。评论是西班牙语,抱歉。

提前致谢。

0 个答案:

没有答案