我有一个带有三个标签的活动,其中每个标签不同,并且显示片段片段之间的移动,使用ViewPager
。我为每个片段的Toolbar
菜单中的片段充气。
当我希望组成每个菜单的项目(显示菜单时)出现淡入淡出效果并随之消失时(当切换到另一个片段并且上面的片段被破坏时),问题出现了。
出现效果,我没有遇到任何问题。在onCreateOptionsMenu ()
片段中的FragmentInfoCenter.java
方法中实现它并且运行良好,但没有意识到在菜单被销毁之前消失的效果。
我看起来像这样:
我试图在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,从而更清楚地看到我得到的内容。评论是西班牙语,抱歉。
提前致谢。