我正在尝试将刷新按钮旋转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);
这是屏幕截图:
没有动画:
当我按下刷新按钮时:按钮很大。
不确定如何解决此问题?有人可以帮我解决这个问题吗?
谢谢!
答案 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"
你的选择!