一、构造器说明
1、RotateAnimation(fromDegrees, toDegrees) [默认以View左上角顶点为旋转点]。
X轴顺时针转动到fromDegrees为旋转的起始点,
X轴顺时针转动到toDegrees为旋转的起始点。
如fromDegrees=0,toDegrees=90;为左上角顶点为旋转点。0度为起始点,90度为终点。进行旋转,旋转了90度
如fromDegrees=60,toDegrees=90;为左上角顶点为旋转点。60度为起始点,90度为终点。进行旋转,旋转了90-60=30度
2、RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
(pivotX,pivotY)为旋转点。pivotX为距离左侧的偏移量,pivotY为距离顶部的偏移量。即为相对于View左上角(0,0)的坐标点。
如View width=100px,height=100px
RotateAnimation(0,10,100,100);则以右下角顶点为旋转点,从原始位置顺时针旋转10度
RotateAnimation(0,90,50,50);则以View的中心点为旋转点,旋转90度
3、RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)
pivotXType, pivotXValue, pivotYType, pivotYValue 旋转点类型及其值。
Animation.ABSOLUTE为绝对值 其他为百分比。
如RotateAnimation(0, 90, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 按中心点旋转90度
效果和2例中的RotateAnimation(0,90,50,50);则以View的中心点为旋转点,旋转90度 。
二、常用属性说明
1、android:interpolator:这个属性是用来设置转动速率的。
LinearInterpolator为匀速效果,Accelerateinterpolator为加速效果、DecelerateInterpolator为减速效果
2、android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止
3、android:duration属性表示从android:fromDegrees转动到android:toDegrees所花费的时间,单位为毫秒。可以用来计算速度。
4、android:startOffset 在调用start函数之后等待开始运行的时间,单位为毫秒,若为10,表示10ms后开始运行
5、android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。
在android:repeatCount大于0或为infinite时生效
6、android:detachWallpaper 表示是否在壁纸上运行
7、android:zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。normal保持内容当前的z轴顺序top运行时在最顶层显示bottom运行时在最底层显示
8、rotateAnimation.setFillAfter(true);
ture表示动画结束后停留在动画的最后位置,false表示动画结束后回到初始位置,默认为false。
使用示例—代码中设置动画
Java代码
public class ParameterSettingActivity extends AppCompatActivity {
private RotateAnimation rotateAnimation;
private ImageView ivParamsetOneManual;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parameter_setting);
initAnim();
initView();
}
private void initAnim() {
rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());//如果不添加这句,那么动画每个周期结束时会停顿一下
rotateAnimation.setDuration(1000);
rotateAnimation.setFillAfter(true);
rotateAnimation.setRepeatCount(Animation.INFINITE);
rotateAnimation.setRepeatMode(Animation.RESTART);
}
private void initView() {
ivParamsetOneManual = (ImageView)findViewById(R.id.iv_paramset_one_manual);
ivParamsetOneManual.setAnimation(rotateAnimation);
rotateAnimation.start();
//animation.cancel(); //结束动画
}
}
xml代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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="@mipmap/background_dark"
tools:context="com.sdkj.heaterbluetooth.activity.ParameterSettingActivity">
<android.support.percent.PercentRelativeLayout
android:layout_below="@+id/header"
android:id="@+id/rl_paramset_one_manual"
android:layout_width="wrap_content"
android:layout_height="72dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_paramset_one_manual"
style="@style/style_paramset_imageview2_background"/>
<ImageView
style="@style/style_paramset_imageview_background"
android:text="一档"/>
</android.support.percent.PercentRelativeLayout>
</RelativeLayout>
style.xml
<resources>
<style name="style_paramset_imageview_background">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
<item name="layout_heightPercent">100%</item>
<item name="layout_aspectRatio">100%</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">10sp</item>
<item name="android:background">@mipmap/bg_paramset_manual_text</item>
</style>
<style name="style_paramset_imageview2_background">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
<item name="layout_heightPercent">100%</item>
<item name="layout_aspectRatio">100%</item>
<item name="android:background">@mipmap/bg_paramset</item>
</style>
</resources>
使用示例—xml中设置动画
java代码
public class ParameterSettingActivity extends AppCompatActivity {
private RotateAnimation rotateAnimation;
private ImageView ivParamsetOneManual;
Animation rotate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parameter_setting);
initTitleBar();
initAnim();
initView();
}
private void initAnim() {
rotate = AnimationUtils.loadAnimation(this, R.anim.anim_paramset_manual_rotate);
LinearInterpolator lin = new LinearInterpolator();
rotate.setInterpolator(lin);
}
private void initView() {
ivParamsetOneManual = (ImageView)findViewById(R.id.iv_paramset_one_manual);
ivParamsetOneManual.setAnimation(rotate);
ivParamsetOneManual.startAnimation(rotate);
//ivParamsetOneManual.clearAnimation();动画停止
}
}
xml和style.xml文件不变
anim_paramset_manual_rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android" >
<rotate
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360"
android:duration = "1000"
android:repeatCount = "-1">
</rotate>
</rotate>