Android中刷新按钮的动画

时间:2014-09-24 14:03:54

标签: android android-actionbar android-animation

我正在尝试将刷新按钮旋转360度。旋转工作正常,但是当图像旋转时显示较大,当动画关闭时,显示的尺寸较小。我不确定为什么会这样?我希望图像动画的大小相同。

我在操作栏上有刷新按钮。

menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.ylg.maps.MainActivity" >

<item
    android:id="@+id/action_about"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>

 <item
    android:id="@+id/action_Refresh"
    android:orderInCategory="1000"
    android:showAsAction="always"
    android:icon="@drawable/refresh"
    android:title="@string/action_Refresh"/>

我的轮播动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator" >

<rotate
    android:duration="1000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="1"
    android:startOffset="0"
    android:toDegrees="360" > 
</rotate>

</set>

我的进度条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="5dp"
android:layout_height="5dp"
android:layout_gravity="center"
android:src="@drawable/refresh" />

以下是我在MainActivity类中使用它的方法,在按下刷新按钮时调用它。

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView iv = (ImageView) inflater.inflate(R.layout.actionbar_indeterminate_progress, null);
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.anim_rotate);
rotation.setRepeatCount(Animation.INFINITE);
iv.startAnimation(rotation);
refreshItem.setActionView(iv);

这是屏幕截图:

没有动画:

enter image description here

当我按下刷新按钮时:按钮很大。

enter image description here

不确定如何解决此问题?有人可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

终于得到了跳跃图标/更大图标的解决方案。此解决方案对于使用库存操作栏的人员非常有用。

在菜单中刷新项目。

<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:icon="@drawable/ic_menu_refresh"
android:actionLayout="@layout/refresh_action_view"
android:showAsAction="ifRoom"
style="@android:style/Widget.ActionButton"
android:title="@string/action_refresh"/>

在MainActivity中:调用以下内容:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
   getMenuInflater().inflate(R.menu.orders, menu);

   final Menu m = menu;
   refreshItem = menu.findItem(R.id.action_refresh);
   refreshItem.getActionView().setOnClickListener(new OnClickListener() 
   {
      @Override
      public void onClick(View v) 
      {   
         m.performIdentifierAction(refreshItem.getItemId(), 0);
         rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_refresh);
         rotation.setRepeatCount(Animation.INFINITE);
      }
   });

return true;

}

并根据需要调用以下内容:

 refreshItem.getActionView().startAnimation(rotation);

停止动画:

 refreshItem.getActionView().clearAnimation();

多数民众赞成。动画将是流畅的......没有任何跳跃或超大..

希望这有助于其他人!

谢谢!

答案 1 :(得分:0)

如果您希望它看起来与ActionButton完全相同,那么您需要使用完全相同的属性。从快速浏览到Holo主题风格,这是我发现的:

    <style name="Widget.ActionButton">
        <item name="android:background">?android:attr/actionBarItemBackground</item>
        <item name="android:paddingLeft">12dip</item>
        <item name="android:paddingRight">12dip</item>
        <item name="android:minWidth">56dip</item>
        <item name="android:minHeight">?android:attr/actionBarSize</item>
    </style>

这意味着你可能需要在你的imageview中添加左右填充(我不确定是否需要minWidth和height)。或者,您可以简单地将上述样式设置为ImageView:

style="@android:style/Widget.ActionButton"

你的选择!