gpt4 book ai didi

android - ActionItem 的动画图标

转载 作者:IT老高 更新时间:2023-10-28 13:06:33 26 4
gpt4 key购买 nike

我一直在到处寻找合适的解决方案来解决我的问题,但似乎还没有找到。我有一个 ActionBar (ActionBarSherlock),其菜单是从 XML 文件扩展而来的,并且该菜单包含一个项目,并且该项目显示为 ActionItem。

菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom"
android:title="Refresh"/>
</menu>

Activity :

[...]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
[...]

ActionItem 显示为带有图标且没有文本,但是当用户单击 ActionItem 时,我希望图标开始动画,更具体地说,是原地旋转。有问题的图标是一个刷新图标。

我意识到 ActionBar 支持使用自定义 View ( Adding an Action View ) 但是此自定义 View 已扩展为覆盖 ActionBar 的整个区域并实际上阻止了除应用程序图标之外的所有内容寻找。

所以我接下来的尝试是尝试使用 AnimationDrawable 并逐帧定义我的动画,将 drawable 设置为菜单项的图标,然后在 onOptionsItemSelected(MenuItem item) 中获取图标并开始使用 ((AnimationDrawable)item.getIcon()).start() 制作动画。然而这并不成功。有谁知道实现这种效果的任何方法?

最佳答案

你在正确的轨道上。以下是 GitHub Gaug.es 应用程序将如何实现它。

首先他们定义了一个动画 XML:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000"
android:interpolator="@android:anim/linear_interpolator" />

现在为 Action View 定义一个布局:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_refresh"
style="@style/Widget.Sherlock.ActionButton" />

我们需要做的就是在点击项目时启用此 View :

 public void refresh() {
/* Attach a rotating ImageView to the refresh item as an ActionView */
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);

Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.clockwise_refresh);
rotation.setRepeatCount(Animation.INFINITE);
iv.startAnimation(rotation);

refreshItem.setActionView(iv);

//TODO trigger loading
}

加载完成后,只需停止动画并清除 View :

public void completeRefresh() {
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}

你就完成了!

一些额外的事情要做:

  • 缓存 Action View 布局膨胀和动画膨胀。它们很慢,因此您只想执行一次。
  • completeRefresh()
  • 中添加 null 检查

这是应用程序的拉取请求:https://github.com/github/gauges-android/pull/13/files

关于android - ActionItem 的动画图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com