Android绘制旋转动画方法是什么
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这期内容当中小编将会给大家带来有关Android绘制旋转动画方法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、准备工作首先需要有一个用于旋转的图片需要考虑
千家信息网最后更新 2025年01月25日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(); } }); }}
上述就是小编为大家分享的Android绘制旋转动画方法是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
周期
动画
角度
就是
方法
内容
坐标
控件
时间
本质
极端
次数
状态
类型
部分
长度
分析
普通
专业
中小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2020数据库安全
德文特数据库
美橙云服务器
网赌棋牌软件开发
软件开发工程属于哪类项目
赣州服务器维保
公司软件开发合同纠纷
中国具有国际影响力的科研数据库
方舟非主机专用服务器加入失败
江苏富士康工控机服务器
软件开发怎么样开价的
数据库dicom
通州区定制软件开发调整
小天办公下载后 输入服务器地址
班会主题网络安全为人民
kvm管理多个服务器
属于数据库技术应用的是什么
计算机网络技术工程就业前景
服务器开机启动后显示正在运行
网络安全教育内容大学
江岸区营销网络安全维护管理系统
北京辉达网络技术有限公司
经典的软件开发模型常用的
数据库免费秘钥
ectouch数据库设置
人造卫星数据库实时在轨卫星
天河靠谱小程序软件开发
黑暗之魂三数据库
网络安全概念股午后异动
asp.net获取数据库