【Android】Tween/Layout/Frame动画

一 : Tween Animation变换动画

  • Alpha:渐变透明动画

  • scale:渐变尺寸的缩放动画

  • Translate:位置移动动画

  • Rotate:旋转动画

    共同属性:

    Durattion:动画持续时间
    fillAfter :设置true,动画转化在动画结束后被应用
    fillbefore: 设置true,动画转化在动画开始前被应用
    interpolator:动画插入器(加速、减速)
    repetCount:动画持续次数
    repateMode:顺序重复、倒叙重复
    startOffset:动画之间的时间间隔

创建动画的两种方式:
java代码创建

Animation alpha = new Animation(0.1f,1.0f);
alpha.setDuration(5000);
img.startAnimation(aplha);

加载布局文件:

Animation scale =AnimationUtils.loadAnimation(TweenActivity.this, R.anim.scale_anim);
img.startAnimation(scale);

<1>:AlphaAnimation透明度动画

 1:fromAlpha:动画起始时透明度
 2:toAlpha:动画终止时透明度
    0.0 完全透明
    1.0完全不透明 

布局文件

<alpha
     android:duration:"1000"
     android:fromAlpha:"0.1"
     android:toAlpha:"1.0"/>
</alpha>

<2>:ScaleAnimation缩放动画
1:fromX, toX分别是起始和结束时X坐标上的伸缩尺寸
2:fromY, toY分别是起始和结束Y 坐标上的伸缩尺寸
3:pivotX,pivotY分别为伸缩动画相对x,y坐标开始的位置

<scale
     android:duration="2000"
     android:fillAfter="false"
     android:fromXScale="0.0"
     android:fromYScale="0.0"
     android:interpolator ="@android:anim/accelerate_decelerate_interpolator"
     android:pivotX="50%"
     android:pivotY="50%"
     android:toXScale="1.0"
     android:toYScale="1.0"/>
</scale>

<3>:TranslateAnimation位移动画
1:fromXDelta, fromYDelta分别是起始时X, Y的坐标
2:toXDelta, toYDelta分别是结束时X, Y的坐标

<translate
     android:duration="1000"
     android:fromXDelta="10"
     android:fromYDelta="10"
     android:toXDelta="100"
     android:toYDelta="100"
/>

<4>:RotateAnimation旋转动画
1:fromDegrees起始角度
2:toDegrees终止的角度
3:pivotX, pivotY分别为旋转动画相对于xy坐标开始的位置

<rotate
     android:duration="1000"
     android:fromDegress="0"
 android:interpolator="@android:anim/accelerate_decelerate_interpolator"
     android:pivotX="50%"
     android:pivotY="50%"
     android:toDegress="+360"
/>

组合动画

续播一:两个加载器,并给第一个动画设置监听器(复写三个方法,在onAnimationEnd()中开启第二个动画的加载器)

    Animation loadAnimation = AnimationUtils.loadAnimation(R.anim.translate);
     image.startAnimation(loadAnimation);
     Animation loadAnimation2 = AnimationUtils.loadAnimation(R.anim.rotate);
     loadAnimation.setAnimationListener(new AnimationListener(){
     public void onAnimationStart(Animation arg0){}
     public void onAnimationRepet(Animation arg0){}
     public void onAnimationEnd(Animation arg0){
          image.startAnimation(loadAnimation2);
     }
});

续播2:写一个动画集AnimationSet,在定义动画A和B,为动画B设置StartOffset,其值就是当前一个动画播放所需要的时间。

<alpha
     android:duration:"3000"
     android:fromAlpha:"0.1"
     android:toAlpha:"1.0"/>
<alpha
     android:duration:"3000"
     android:startOffset="3000"
     android:fromAlpha:"1.0"
     android:toAlpha:"0.2"/>

循环播放动画的实现

AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f,1.0f);
alphaAnimation.setDuration(100);
alphaAnimation.setRepeatCount(10);
//倒叙重复REVERSE  正序重复RESTART
alphaAnimation.setRepeatMode(Animation.REVERSE);
image.startAnimation(alphaAnimation);

Acitivity 切换动画

Intent intent = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent);
overridePendingTransition(R.anim.zoom_in, R.anim_zoom_out);

//zoom_in

<scale
     android:duration="1000"
     android:fromXScale="0.1"
     android:fromYScale="0.1"
     android:pivotX="50%"
     android:pivotY="50%"
     android:toXScale="1.0"
     android:toYScale="1.0"/>
<alpha
     android:duration="1000"
     android:fromAlpha="0"
     android:toAlpha="1.0"/>

//zoom_out

< scale
        android:duration ="@android:integer/config_mediumAnimTime"
        android:fromXScale= "1.0"
        android:fromYScale= "1.0"
        android:pivotX= "50%"
        android:pivotY= "50%"
        android:toXScale= "0.1"
        android:toYScale= "0.1" />

    <alpha
        android:duration ="@android:integer/config_mediumAnimTime"
        android:fromAlpha= "0"
        android:toAlpha= "1.0" />

二: Frame Animation帧动画

image.setImageResource(R.drawable. anim_list);

< animation-list xmlns:android ="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable= "@drawable/one"
        android:duration= "500" />
    <item
        android:drawable= "@drawable/two"
        android:duration= "500" />
    <item
        android:drawable= "@drawable/three"
        android:duration= "500" />
    <item
        android:drawable= "@drawable/four"
        android:duration= "500" />
    <item
        android:drawable= "@drawable/five"
        android:duration= "500" />
    <item
        android:drawable= "@drawable/six"
        android:duration= "500" />

</ animation-list>

三:Layout Animation 布局动画

为ViewGroups添加动画使用LayoutAnimationController
随机散列的ListView

public class ListActivity extends Activity{
      private ListView listView;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout. list_layout);
            listView=(ListView) findViewById(R.id. listView);
           List<String>list= new ArrayList<String>();
            for( int i=0;i<20;i++)
           {
                list.add( "ReliaM" +i);
           }
           ArrayAdapter<String>adapter= new ArrayAdapter<String>(this , android.R.layout. simple_list_item_1, list);
         listView.setAdapter(adapter);
         LayoutAnimationController lac= new LayoutAnimationController(AnimationUtils.loadAnimation( this, R.anim.zoom_in ));
         lac.setOrder(LayoutAnimationController. ORDER_NORMAL);
         listView.setLayoutAnimation(lac);
         listView.startLayoutAnimation();
     }
}

Thanks慕课网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值