Android ActionBar中的按钮添加旋转动画

这篇博客介绍了如何在Android应用的ActionBar中添加一个刷新按钮,并实现点击时的旋转动画效果。通过菜单布局、设置动画属性以及在Activity中进行相关操作,展示了点击停止动画的功能。同时,文中还提到了其他Android开发的相关话题,如AlertDialog的使用、shareSDK的SSO登录以及MySQL的B-Tree索引等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将Menu菜单项显示在ActionBar上,这里显示一个刷新按钮,模拟在刷新动作时的添加刷新动画

菜单布局

menu.xml

复制代码
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_stop"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_stop"/>
    <item
        android:id="@+id/action_refresh"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:icon="@drawable/ic_action_refresh"
        />

</menu>
复制代码

显示旋转动画的view refresh_view.xml

复制代码
<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:scaleType="centerInside"
  android:contentDescription="refresh"
  />
复制代码

设置旋转属性

refresh.xml

复制代码
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright 2012 GitHub Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
  android:duration="2000"
  android:fromDegrees="0"
  android:interpolator="@android:anim/linear_interpolator"
  android:pivotX="50%"
  android:pivotY="50%"
  android:toDegrees="360" />
复制代码
View Code

Activity

复制代码
package com.example.actionbarmenubtnrefresh;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

    protected MenuItem refreshItem;
    
    private boolean isRefreshState = false;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //MenuInflater实例化Menu目录下的Menu布局文件
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_refresh:
            refreshMenuItemView(item);
            Toast.makeText(getBaseContext(), "开始刷新", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_stop:
            hideRefreshAnimation();
            Toast.makeText(getBaseContext(), "停止刷新", Toast.LENGTH_SHORT).show();
            break;

        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void refreshMenuItemView(MenuItem item) {
        hideRefreshAnimation();
        refreshItem = item;
        
        //LayoutInflater实例化整个布局文件
        //使用ImageView设置成MenuItem的ActionView
        ImageView refreshView = (ImageView)getLayoutInflater().inflate(R.layout.refresh_view, null);
        refreshView.setImageResource(R.drawable.ic_action_refresh);
        refreshItem.setActionView(refreshView);
        //显示刷新动画
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.refresh);
        //设置重复模式  Defines what this animation should do when it reaches the end
        animation.setRepeatMode(Animation.RESTART);
        //设置重复次数
        animation.setRepeatCount(Animation.INFINITE);
        //使用ImageView 显示旋转动画
        refreshView.startAnimation(animation);
        isRefreshState = true;
    }
    
    private void hideRefreshAnimation() {
        if (refreshItem != null) {
            View view = refreshItem.getActionView();
            if (view != null) {
                view.clearAnimation();
                refreshItem.setActionView(null);
                isRefreshState = false;
            }
        }
    }
    

}
复制代码
View Code

效果如下

点击stop停止动画

参考 http://my.oschina.net/fanxiao/blog/152175

gif图片在线制作: http://picasion.com/

其他精彩文章文章

jQuery教程(9)-DOM树操作之复制元素

android学习笔记(35)android AlertDialog创建列表对话框[2]

android shareSDK sso登录新浪和微信

mysql 索引类型详解-B-Tree索引

BroadcastReceiver 使用AlertDialog后 app奔溃了

更多关于android开发文章


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值