Android如何实现旋转动画
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容主要讲解"Android如何实现旋转动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android如何实现旋转动画"吧!1、准备工作首先需要有一
千家信息网最后更新 2025年11月13日Android如何实现旋转动画
本篇内容主要讲解"Android如何实现旋转动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android如何实现旋转动画"吧!
1、准备工作
首先需要有一个用于旋转的图片
需要考虑如何开始、结束、加速、减速
2、加速减速原理
本次的动画采用RotateAnimation,初始化需要的参数如下
public RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXValue,int pivotYType, float pivotYValue) { mFromDegrees = fromDegrees;//开始角度 mToDegrees = toDegrees;//结束角度 mPivotXValue = pivotXValue;//确定x轴坐标的类型 mPivotXType = pivotXType;//x轴的值,0.5f表明是以自身这个控件的一半长度为x轴 mPivotYValue = pivotYValue;//确定y轴坐标的类型 mPivotYType = pivotYType;//y轴的值,0.5f表明是以自身这个控件的一半长度为y轴 initializePivotPoint();}所谓旋转动画,在本质上就是在如上的对象初始化之后,规定在一定的周期内旋转
所谓加速,本质上就是在设定好的周期内变换旋转角度
或者修改周期,在预设周期内旋转一定角度
总之,角度和周期一定会变化一个,就可以决定动画的快慢。
如: 从 2秒内旋转360度 到 1秒内旋转360度 就是一种加速,从 2秒内旋转360度 到 2秒内旋转720度 也是一种加速。
反之就是减速。
3、初始化
RotateAnimation rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setInterpolator(new LinearInterpolator()); rotate.setDuration(2000);//设置动画持续周期 rotate.setRepeatCount(-1);//设置重复次数// rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态 rotate.setStartOffset(10);//执行前的等待时间
4、开始
start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fan.startAnimation(rotate); } });5、加速
首先需要创建全局变量
private int duration=2000;
加速样例
accelerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (duration>10){ duration/=2; //周期除2角度不变加速(需要考虑极端,所以加一个判断) } rotate.setDuration(duration); //设置周期 fan.startAnimation(rotate); //开始旋转 } });6、减速
decelerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (duration<10000){ duration*=2; //周期乘2角度不变减速(需要考虑极端,所以加一个判断) } rotate.setDuration(duration); //设置周期 fan.startAnimation(rotate); //开始旋转 }});7、停止
stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fan.clearAnimation(); //停止 }});8、项目源码
Layout部分
MainActivity部分
package com.suk.rotate;import androidx.appcompat.app.AppCompatActivity;import android.app.AlertDialog;import android.graphics.drawable.Drawable;import android.graphics.drawable.RotateDrawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.LinearInterpolator;import android.view.animation.RotateAnimation;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.Toast;import com.suk.rotate.R;public class MainActivity extends AppCompatActivity { private ImageView fan; private Button start; private Button stop; private Button accelerate; private RotateAnimation rotate; private Button decelerate; private int duration=2000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fan = findViewById(R.id.fan); start = findViewById(R.id.start); stop = findViewById(R.id.stop); accelerate = findViewById(R.id.accelerate); decelerate = findViewById(R.id.decelerate); } @Override protected void onStart() { super.onStart(); rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setInterpolator(new LinearInterpolator());// rotate.setInterpolator(lin); rotate.setDuration(2000);//设置动画持续周期 rotate.setRepeatCount(-1);//设置重复次数// rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态 rotate.setStartOffset(10);//执行前的等待时间 start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fan.startAnimation(rotate); } }); accelerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (duration>10){ duration/=2;} rotate.setDuration(duration); fan.startAnimation(rotate); } }); decelerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (duration<10000){ duration*=2;} rotate.setDuration(duration); fan.startAnimation(rotate); } }); /* fan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("点我没用"); dialog.setIcon(R.drawable.fan); dialog.setPositiveButton("OK",null); dialog.setMessage("这是普通对话框"); View view=View.inflate(MainActivity.this,R.layout. activity_main1, null); dialog.setView(view); dialog.create(); dialog.show(); } }); */ stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fan.clearAnimation(); } }); }}需要有三个图片:
fan.png 风扇扇叶
border.png 风扇边框
title.png 贴图
(随便找一个能看就行)
到此,相信大家对"Android如何实现旋转动画"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
周期
动画
角度
就是
内容
图片
坐标
控件
时间
本质
极端
次数
状态
类型
部分
长度
风扇
学习
实用
普通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库plsql汉语
sql数据库一附加就无响应
网络安全问题防范教案
经验反馈网络安全宣传周
软件开发文档六性审查
dazy服务器修改参数
连接到本地的数据库
良好软件开发服务保障
网络安全发展的基本规律
网络安全开题报告研究思路
太原中小学校园网络安全
并发 计数 数据库
数据库期末考试2013
红帽杯网络安全攻防
母婴数据库
安卓手机数据库软件
网络技术与应用txt下载
魔兽世界 冰风岗 服务器
软件开发学习方案
网络安全认证802.1x
数据库设计景点门票售票系统
淮安创新软件开发诚信服务
搜索六年级网络安全宣传手抄报
没有服务器可以处理这个请求
泰州营销网络技术市场价格
网络安全主题绘画写什么
网络技术发展3条主线
中国石油网络安全宣传周
内网安全防护服务器
光遇服务器邀请