25补间动画
- 补间动画 只需告诉系统开始形状和坐标和终点位置和形状 期间动画由系统自行补画过渡 和Flash中概念一样
- 注意补间动画哪怕移动了 其属性还是原来 比如图片A从X移动Y 那么其坐标的真实属性还是在X 也就是说只有点击X才能触发A图的点击事件
- 在res中创建一个文件anim新建对应的文件即可
xml创建属性动画
android:fillAfter=”true”在xml中设置好像不起作用
anim_alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="3000"
android:fillAfter="true"
android:repeatCount="3"
android:repeatMode="reverse"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
>
<!--
取值范围 0.0-1.0
android:fromAlpha="1.0" 开始的透明度
android:toAlpha="0.0" 结束的透明度
android:duration="3000" 展示的时间
android:fillAfter="true" 是否保持最后的状态
android:repeatCount="3" 重复次数
android:repeatMode="restart" 执行方法
restart:正方向
reverse:反方向
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 插值器
动画执行的速率 先加速后加速
-->
</alpha>
anim_rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%p"
android:pivotY="50%p"
android:duration="3000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fillAfter="true"
android:repeatCount="3"
android:repeatMode="restart"
>
<!--
android:fromDegrees="0"从哪个角度开始旋转
android:toDegrees="360" 到那个角度
android:pivotX="50%p" 以谁为圆心 x 带p以父布局为参考物 不带p以自身参考物
android:pivotY="50%p" y
android:duration="3000"-->
</rotate>
anim_scale.xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="2"
android:toYScale="2"
android:pivotX="50%"
android:pivotY="25%p"
android:duration="3000"
>
<!--
android:fromXScale="1" x轴缩放的起始比例
android:fromYScale="1" y轴缩放的起始比例
android:toXScale="2" x轴缩放的结束比例
android:toYScale="2" y轴缩放的结束比例
android:pivotX="50%" x轴的缩放中心
android:pivotY="50%" y轴的缩放中心
-->
</scale>
anim_set.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000"
></rotate>
<translate
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="500"
android:duration="3000"
></translate>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="3000"
></alpha>
</set>
anim_translate.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="200"
android:duration="3000"
>
<!--
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="200"
android:duration="3000"
起始位置 到 结束位置
-->
</translate>
布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.qf.sxy.tweenanimation.MainActivity">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_alpha"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="透明"/>
<Button
android:id="@+id/btn_rotate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="旋转"/>
<Button
android:id="@+id/btn_scale"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="缩放"/>
<Button
android:id="@+id/btn_translate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="位移"/>
<Button
android:id="@+id/btn_set"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="集合"/>
</LinearLayout>
<ImageView
android:id="@+id/iv"
android:src="@mipmap/cyddz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ll" />
</RelativeLayout>
MainActivity.java
package com.qf.sxy.tweenanimation;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = ((ImageView) findViewById(R.id.iv));
}
public void MyClick(View view) {
switch (view.getId()){
case R.id.btn_alpha://透明度动画
iv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_alpha));
break;
case R.id.btn_rotate://旋转动画
iv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_rotate));
break;
case R.id.btn_scale://缩放动画
iv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_scale));
break;
case R.id.btn_translate://位移动画
iv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_translate));
break;
case R.id.btn_set://集合动画
iv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_set));
break;
}
}
}
java代码创建属性动画
布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.qf.sxy.tweenanimation.MainActivity">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_alpha"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="透明"/>
<Button
android:id="@+id/btn_rotate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="旋转"/>
<Button
android:id="@+id/btn_scale"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="缩放"/>
<Button
android:id="@+id/btn_translate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="位移"/>
<Button
android:id="@+id/btn_set"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="MyClick"
android:text="集合"/>
</LinearLayout>
<ImageView
android:id="@+id/iv"
android:src="@mipmap/cyddz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ll" />
</RelativeLayout>
MainActivity.java
package com.qf.sxy.tweenanimation2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView iv;
private Animation animation;//声明动画对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = ((ImageView) findViewById(R.id.iv));
}
public void MyClick(View view) {
switch (view.getId()){
case R.id.btn_alpha:
//获取动画 参数1:开始的透明度 参数2;结束的透明度
animation = new AlphaAnimation(1.0f,0.0f);
animation.setDuration(3000);
animation.setFillAfter(true);
break;
case R.id.btn_rotate:
/**
* 旋转动画
* 参数1:从哪个角度
* 参数2:到那个角度
* 参数3:x参照物的类型 自身 还是 父布局
* 参数4:当前x坐标的值
* 参数5:y参照物的类型 自身 还是 父布局
* 参数6:当前y坐标的值
*/
animation = new RotateAnimation(0,
720,
Animation.RELATIVE_TO_PARENT,0.5f,
Animation.RELATIVE_TO_PARENT,0.5f);
animation.setDuration(5000);
animation.setFillAfter(true);
break;
case R.id.btn_scale:
animation = new ScaleAnimation(0.1f,3f,0.1f,3f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f
);
animation.setDuration(3000);
animation.setFillAfter(true);
break;
case R.id.btn_translate:
animation = new TranslateAnimation(0,200,0,200);
animation.setDuration(5000);
animation.setFillAfter(true);
animation.setInterpolator(new AccelerateInterpolator());//插值器 一直加速
break;
case R.id.btn_set:
animationSet();
break;
}
//启动动画
// iv.startAnimation(animation);
}
//集合动画
private void animationSet() {
Animation rotate = new RotateAnimation(0,720,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
Animation alpha = new AlphaAnimation(1.0f,0.0f);
// true 使用的是set默认的插值器
// false 使用自身动画的插值器
AnimationSet animationSet = new AnimationSet(false);
//添加动画到集合
animationSet.addAnimation(rotate);
animationSet.addAnimation(alpha);
//设置动画时间
animationSet.setDuration(3000);
//启动动画
iv.startAnimation(animationSet);
}
}