Android中的动画
Frame:帧动画 所涉及的JAVA对象有AnimationDrawable
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@mipmap/girl_1" android:duration="50" />
<item android:drawable="@mipmap/girl_2" android:duration="50" />
<item android:drawable="@mipmap/girl_3" android:duration="50" />
<item android:drawable="@mipmap/girl_4" android:duration="50" />
<item android:drawable="@mipmap/girl_5" android:duration="50" />
<item android:drawable="@mipmap/girl_6" android:duration="50" />
<item android:drawable="@mipmap/girl_7" android:duration="50" />
<item android:drawable="@mipmap/girl_8" android:duration="50" />
<item android:drawable="@mipmap/girl_9" android:duration="50" />
<item android:drawable="@mipmap/girl_10" android:duration="50" />
<item android:drawable="@mipmap/girl_11" android:duration="50" />
- <!-- animation-list 表示执行动画的列表
android:oneshot 表示如果指定为true 表示animation-lis标签中的动画执行一次,如果指定false表示item中的动画一直循环
android:drawable="@mipmap/图片名称" android:duration="" 表示帧动画中播放的时间毫秒值
/**
* Android中动画的分类
* View Animation 视图动画 只是实现动画效果 对view本身的属性并未有影响
* Frame 帧动画
* Tween 补间动画
*
* Property Animation 属性动画 通过动画的变换效果执行改变当前view的属性 sdk3.0之后出现
*
* Frame 帧动画 app中应用场景(页面未加载出来之前的动画效果)
*
*
*/
public class MainActivity extends AppCompatActivity {
private ImageView iv;
private AnimationDrawable drawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv= (ImageView) findViewById(R.id.iv);
//设置当前的图片的资源为帧动画的xml文件
iv.setBackgroundResource(R.drawable.frame_animation);
drawable= (AnimationDrawable) iv.getBackground();
}
public void click(View view){
switch (view.getId()){
case R.id.btn_open:
if(!drawable.isRunning()){
drawable.start();//启动动画
}
break;
case R.id.btn_close:
if(drawable.isRunning()){
drawable.stop();//停止动画
}
break;
}
}
}
Tween 补间动画
所涉及的JAVA对象有AlphaAnimation (渐变动画(透明度)),ScaleAnimation(缩放动画),TranslateAnimation(位移动画),RotateAnimation(旋转动画)
res/anim/alpha_anim.xml
<?xml version="1.0" encoding="utf-8" ?>
- <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="0.5" android:duration="2000" android:fillAfter="true" android:repeatCount="infinite" android:repeatMode="reverse">
- <!-- alpha 通过控制透明度实现动画的效果
透明度的变化情况 0.0-1.0 0.0完全透明 1.0表示完全不透明
android:fromAlpha="浮点" 设置动画的起始的透明度
android:toAlpha="浮点" 设置动画的结束的透明度
以下属性的设置补间动画都可以设置
android:duration="时间的毫秒值" 设置动画的持续时间
android:fillAfter="true" 指定为true表示动画结束时维持在最终的状态 默认恢复到原始状态
android:repeatCount="infinite" 动画默认执行一次 infinite表示动画一直执行
android:repeatMode="" 设置动画的重复启动模式 restart表示动画一直从from变化到to
reverse 表示动画从from-to-from-to
-->
public class MainActivity extends AppCompatActivity {
private ImageView ivTopBattery,ivClock,ivMiddleBattery,ivNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initAnimation();
}
//开启动画
public void initAnimation(){
//缩放动画
Animation topScale= AnimationUtils.loadAnimation(this,R.anim.top_scale);
ivTopBattery.startAnimation(topScale);
//帧动画
AnimationDrawable drawable= (AnimationDrawable) ivClock.getBackground();
drawable.start();
//旋转动画
Animation middleRotate=AnimationUtils.loadAnimation(this,R.anim.rotate_middle);
ivMiddleBattery.startAnimation(middleRotate);
//组合动画
Animation bottomSet=AnimationUtils.loadAnimation(this,R.anim.set_anim);
ivNext.startAnimation(bottomSet);
}
//初始化视图
public void initView(){
ivTopBattery= (ImageView) findViewById(R.id.iv_top_bettery);
ivClock= (ImageView) findViewById(R.id.iv_clock);
ivMiddleBattery= (ImageView) findViewById(R.id.iv_middle_bettery);
ivNext= (ImageView) findViewById(R.id.iv_next);
}
}
属性动画 所涉及的JAVA对象有 ValueAnimator、ObjectAnimatior
Res/animator/object_scalex.xml
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="scaleX"
android:valueType="floatType"
android:valueFrom="1.0"
android:valueTo="2.0"
android:duration="5000"
android:repeatCount="infinite"
android:repeatMode="restart"
>
<!--
android:propertyName="属性的名称" 表示当前属性动画操作的属性的是什么
android:valueType="floatType" 表示当前属性动画操作的属性取值的类型
android:valueFrom="" 表示当前操作的属性值的起始值
android:valueTo="" 表示当前操作的属性值的结束值
-->
</objectAnimator>
public class MainActivity extends AppCompatActivity {
private ImageView iv;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv= (ImageView) findViewById(R.id.iv);
tv= (TextView) findViewById(R.id.tv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"我被点击了!",Toast.LENGTH_SHORT).show();
}
});
//Animator abstract---ValueAnimator----ObjectAnimator
Animator animator=AnimatorInflater.loadAnimator(this,R.animator.object_back);
animator.setTarget(tv);
animator.start();
}
//点击按钮对控件的宽度和高度进行缩放
public void click(View view){
Animator animator=null;
switch (view.getId()){
case R.id.btn_scaleX:
animator= AnimatorInflater.loadAnimator(MainActivity.this,R.animator.object_scalex);
break;
case R.id.btn_scaleY:
animator=AnimatorInflater.loadAnimator(MainActivity.this,R.animator.object_scalexy);
break;
}
animator.setTarget(iv);//指定当前的属性动画操作的view控件
animator.start();//启动动画
}
}