Android 动画菜单项 showing/hiding 时
Android Animate Menu Items when showing/hiding them
当菜单项出现在操作栏中时,是否可以设置它们的动画?
我在水平寻呼机视图中有 3 个片段,当我在第一个时,我有这个 :
http://i.stack.imgur.com/UuI48.png
在第二个片段上,我有这个:
http://i.stack.imgur.com/hZJG3.png
但是当我滑动到另一个时,操作栏中的项目只是出现(弹出)或消失,我认为如果它们从右向左滑动会更好的用户体验。
非常感谢。
您可以在 onCreateOptionsMenu(Menu menu)
中为菜单项设置动画。一个糟糕的实施可能是这样的:
public class YourFragment extends Fragment{
private boolean mShouldAnimateMenuItem = true;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
if (mShouldAnimateMenuItem){
ImageView image = new ImageView(this);
image.setImageResource(R.drawable.your_menu_item_icon);
menu.getItem(0).setActionView(image); //item in the 0 position
Animation anim = AnimationUtils.loadAnimation(getActivity(),R.anim.translate_from_right_to_current_accelerate_fast);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
menu.getItem(0).setActionView(null);
}
});
menu.getItem(0).getActionView().startAnimation(anim);
mShouldAnimateMenuItem = false;
}
return true;
}
}
通过这种方式,您可以为 actionView
设置动画,完成后,您只需丢弃项目的 actionView
。
translate_from_right_to_current_accelerate_fast.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="false"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="2000"
android:fromXDelta="100%p"
android:toXDelta="0" />
</set>
当菜单项出现在操作栏中时,是否可以设置它们的动画?
我在水平寻呼机视图中有 3 个片段,当我在第一个时,我有这个 :
http://i.stack.imgur.com/UuI48.png
在第二个片段上,我有这个:
http://i.stack.imgur.com/hZJG3.png
但是当我滑动到另一个时,操作栏中的项目只是出现(弹出)或消失,我认为如果它们从右向左滑动会更好的用户体验。
非常感谢。
您可以在 onCreateOptionsMenu(Menu menu)
中为菜单项设置动画。一个糟糕的实施可能是这样的:
public class YourFragment extends Fragment{
private boolean mShouldAnimateMenuItem = true;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
if (mShouldAnimateMenuItem){
ImageView image = new ImageView(this);
image.setImageResource(R.drawable.your_menu_item_icon);
menu.getItem(0).setActionView(image); //item in the 0 position
Animation anim = AnimationUtils.loadAnimation(getActivity(),R.anim.translate_from_right_to_current_accelerate_fast);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
menu.getItem(0).setActionView(null);
}
});
menu.getItem(0).getActionView().startAnimation(anim);
mShouldAnimateMenuItem = false;
}
return true;
}
}
通过这种方式,您可以为 actionView
设置动画,完成后,您只需丢弃项目的 actionView
。
translate_from_right_to_current_accelerate_fast.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="false"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="2000"
android:fromXDelta="100%p"
android:toXDelta="0" />
</set>