android 动画基础,Android学习之动画基础

一:逐帧动画

1、效果展示

9af3fb381f9eea4a1b81b83f569d61c9.gif

逐帧动画是以图片为基础的,通过AniamtionDrawable来实现的,如上图所示。

2、实现步骤

1)、通过animation-lis建立帧动画xml文件

android:drawable="@drawable/frame_1"

android:duration="300"/>

android:drawable="@drawable/frame_2"

android:duration="300"/>

android:drawable="@drawable/frame_3"

android:duration="300"/>

2)、给需要实现动画的View设置背景

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:id="@+id/view"

android:background="@drawable/loading"

android:layout_centerInParent="true"

android:layout_width="300dp"

android:layout_height="300dp"/>

android:layout_alignParentBottom="true"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/btnStart"

android:text="start"

android:onClick="onClick"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="wrap_content"/>

android:id="@+id/btnStop"

android:text="stop"

android:onClick="onClick"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="wrap_content"/>

3)、通过AnimationDrawable开始或者停止帧动画

public class MainActivity extends AppCompatActivity{

private AnimationDrawable animationDrawable;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_frame_animation);

View view = findViewById(R.id.view);

animationDrawable = (AnimationDrawable) view.getBackground();

}

public void onClick(View v){

switch (v.getId()) {

case R.id.btnStart:

animationDrawable.start();

break;

case R.id.btnStop:

animationDrawable.stop();

break;

}

}

}

二:视图动画

和逐帧动画不同,视图动画操作的是Android中的视图,如文本框、按钮和ImageView等。视图动画主要有透明度动画、缩放动画、位移动画、旋转动画和集合动画。

1、透明度动画

1)、透明度动画效果展示

1d700d115ca24364892ccb6288842f54.gif

2)、透明度动画实现

透明度动画是通过alpha标签实现的。

android:fromAlpha="1.0"

android:toAlpha="0.1"

android:duration="1000" />

Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);

v.startAnimation(alphaAnimation);

2、缩放动画

1)、缩放动画效果展示

e672e91fef6617fef8289ff01e3181f7.gif

2)、缩放动画实现

透明度动画是通过scale标签实现的,其中pivotx和pivoty是基准点的意思。

android:duration="1000">

android:fromXScale="1.0"

android:toXScale="0.75"

android:fromYScale="1.0"

android:toYScale="0.5"

android:pivotX="50%"

android:pivotY="50%"/>

Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);

v.startAnimation(scaleAnimation);

3、位移动画

1)、位移动画效果展示

a2c18beaef4b7bedbb85e6b54b1db57d.gif

2)、位移动画实现

位移动画是通过translate标签实现的,android:toXDelta=”50%p”的意思是移动到其父布局的50%处。

android:duration="1000">

android:fromXDelta="0"

android:toXDelta="50%p"

android:fromYDelta="0"

android:toYDelta="0"/>

Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);

v.startAnimation(translateAnimation);

4、旋转动画

1)、旋转动画效果展示

109998440404a21070cf3c00be4739bb.gif

2)、旋转动画实现

位移动画是通过rotate标签实现的,repeatCount是指动画执行次数,repeatMode是指动画执行方式。

android:duration="1000">

android:fromDegrees="0"

android:toDegrees="360"

android:pivotX="50%"

android:pivotY="50%"

android:repeatMode="reverse"

android:repeatCount="infinite"/>

Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);

v.startAnimation(rotateAnimation);

三:属性动画

属性动画可以操作任意对象,动画的本质就是给一个初始值,给一个结束指,如果能够从初始值平滑的变到结束值,那这就是一个动画系统。视图变化并没有真正的改变View的属性,再动画完成后,view的高度和宽度并没有变化,但是属性动画是可以真正改变属性的。属性动画能定义的动画属性包括时长、时间插值器(动画的速度)、重复次数以及重复模式、动画集和延迟。这里就以动画集来演示

1、动画集

1)、动画集效果展示

6af68d16bc23911c555485302e13c797.gif

2)、动画集实现

第一种实现方式

// 旋转动画

Animator rotateAnimator = ObjectAnimator.ofFloat(view, "rotation", 0, 720);

rotateAnimator.setDuration(1000);

// 平移动画

Animator moveAnimator = ObjectAnimator.ofFloat(view, "x", 0, 500);

moveAnimator.setDuration(1000);

AnimatorSet set = new AnimatorSet();

// 同时执行

set.playTogether(rotateAnimator, moveAnimator);

set.start();

第二种实现方式

// 旋转动画

view.animate().rotation(720).setDuration(1000).start();

// 平移动画

view.animate().translationX(500).setDuration(1000).start();

三:小结

1、什么时候使用逐帧动画?

逐帧动画是建立在图片的基础上的,应用范围比较小,某些App在启动页的时候会使用逐帧动画来实现一种轮播效果。

2、视图动画和属性动画有什么区别?

视图动画只能让视图产生动画效果,属性动画则更为强大,一切通过视图动画系统能够实现的效果都能通过属性动画实现,而且属性动画会真实的去修改这个视图的属性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值