Android如何实现旋转动画

Android如何实现旋转动画

本篇内容主要讲解“Android如何实现旋转动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何实现旋转动画”吧!

1、准备工作

首先需要有一个用于旋转的图片

Android如何实现旋转动画

需要考虑如何开始、结束、加速、减速

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如何实现旋转动画”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-01-06 23:32:02
收藏
分享
海报
0 条评论
28
上一篇:SQL慢查询优化的方法是什么 下一篇:.Net Core服务治理Consul健康检查方法是什么
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码