Android如何实现旋转动画
Android如何实现旋转动画
本篇内容主要讲解“Android如何实现旋转动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何实现旋转动画”吧!
1、准备工作
首先需要有一个用于旋转的图片
需要考虑如何开始、结束、加速、减速
2、加速减速原理
本次的动画采用RotateAnimation,初始化需要的参数如下
publicRotateAnimation(floatfromDegrees,floattoDegrees,intpivotXType,floatpivotXValue,intpivotYType,floatpivotYValue){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、初始化
RotateAnimationrotate=newRotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);rotate.setInterpolator(newLinearInterpolator());rotate.setDuration(2000);//设置动画持续周期rotate.setRepeatCount(-1);//设置重复次数//rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态rotate.setStartOffset(10);//执行前的等待时间
4、开始
start.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){fan.startAnimation(rotate);}});
5、加速
首先需要创建全局变量
privateintduration=2000;
加速样例
accelerate.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(duration>10){duration/=2;//周期除2角度不变加速(需要考虑极端,所以加一个判断)}rotate.setDuration(duration);//设置周期fan.startAnimation(rotate);//开始旋转}});
6、减速
decelerate.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(duration<10000){duration*=2;//周期乘2角度不变减速(需要考虑极端,所以加一个判断)}rotate.setDuration(duration);//设置周期fan.startAnimation(rotate);//开始旋转}});
7、停止
stop.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){fan.clearAnimation();//停止}});
8、项目源码
Layout部分
<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#DEECFA"tools:context=".MainActivity"><RelativeLayoutandroid:layout_centerHorizontal="true"android:layout_marginTop="100dp"android:id="@+id/relativeLayout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@mipmap/border"tools:layout_editor_absoluteX="566dp"tools:layout_editor_absoluteY="132dp"><ImageViewandroid:id="@+id/fan"android:layout_width="wrap_content"android:layout_height="wrap_content"app:srcCompat="@mipmap/fan"tools:layout_editor_absoluteX="552dp"tools:layout_editor_absoluteY="122dp"/></RelativeLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="150dp"><Buttonandroid:id="@+id/start"android:layout_width="60dp"android:layout_height="60dp"android:background="@mipmap/border"android:text="开始"tools:layout_editor_absoluteX="525dp"tools:layout_editor_absoluteY="596dp"/><Buttonandroid:id="@+id/accelerate"android:layout_marginLeft="100dp"android:layout_width="60dp"android:layout_height="60dp"android:background="@mipmap/border"android:text="加速"tools:layout_editor_absoluteX="650dp"tools:layout_editor_absoluteY="596dp"/><Buttonandroid:layout_marginLeft="100dp"android:id="@+id/decelerate"android:layout_width="60dp"android:layout_height="60dp"android:background="@mipmap/border"android:text="减速"tools:layout_editor_absoluteX="795dp"tools:layout_editor_absoluteY="596dp"/><Buttonandroid:id="@+id/stop"android:layout_marginLeft="100dp"android:layout_width="60dp"android:layout_height="60dp"android:background="@mipmap/border"android:text="结束"tools:layout_editor_absoluteX="950dp"tools:layout_editor_absoluteY="596dp"/></LinearLayout><ImageViewandroid:layout_centerVertical="true"android:layout_marginLeft="90dp"android:id="@+id/imageView"android:layout_width="261dp"android:layout_height="527dp"app:srcCompat="@mipmap/title"tools:layout_editor_absoluteX="141dp"tools:layout_editor_absoluteY="132dp"/></RelativeLayout>
MainActivity部分
packagecom.suk.rotate;importandroidx.appcompat.app.AppCompatActivity;importandroid.app.AlertDialog;importandroid.graphics.drawable.Drawable;importandroid.graphics.drawable.RotateDrawable;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.animation.Animation;importandroid.view.animation.AnimationUtils;importandroid.view.animation.LinearInterpolator;importandroid.view.animation.RotateAnimation;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.RelativeLayout;importandroid.widget.Toast;importcom.suk.rotate.R;publicclassMainActivityextendsAppCompatActivity{privateImageViewfan;privateButtonstart;privateButtonstop;privateButtonaccelerate;privateRotateAnimationrotate;privateButtondecelerate;privateintduration=2000;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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);}@OverrideprotectedvoidonStart(){super.onStart();rotate=newRotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);rotate.setInterpolator(newLinearInterpolator());//rotate.setInterpolator(lin);rotate.setDuration(2000);//设置动画持续周期rotate.setRepeatCount(-1);//设置重复次数//rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态rotate.setStartOffset(10);//执行前的等待时间start.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){fan.startAnimation(rotate);}});accelerate.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(duration>10){duration/=2;}rotate.setDuration(duration);fan.startAnimation(rotate);}});decelerate.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(duration<10000){duration*=2;}rotate.setDuration(duration);fan.startAnimation(rotate);}});/*fan.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){AlertDialog.Builderdialog=newAlertDialog.Builder(MainActivity.this);dialog.setTitle("点我没用");dialog.setIcon(R.drawable.fan);dialog.setPositiveButton("OK",null);dialog.setMessage("这是普通对话框");Viewview=View.inflate(MainActivity.this,R.layout.activity_main1,null);dialog.setView(view);dialog.create();dialog.show();}});*/stop.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){fan.clearAnimation();}});}}
需要有三个图片:
fan.png 风扇扇叶
border.png 风扇边框
title.png 贴图
(随便找一个能看就行)
到此,相信大家对“Android如何实现旋转动画”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?