Android学习之动画基础

一:逐帧动画

1、效果展示

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

2、实现步骤

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

<?xml version="1.0" encoding="utf-8"?>

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

<item

android:drawable="@drawable/frame_1"

android:duration="300"/>

<item

android:drawable="@drawable/frame_2"

android:duration="300"/>

<item

android:drawable="@drawable/frame_3"

android:duration="300"/>

</animation-list>

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

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayoutxmlns: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"

tools:context=".MainActivity">

<View

android:id="@+id/view"

android:background="@drawable/loading"

android:layout_centerInParent="true"

android:layout_width="300dp"

android:layout_height="300dp"/>

<LinearLayout

android:layout_alignParentBottom="true"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content">

<Button

android:id="@+id/btnStart"

android:text="start"

android:onClick="onClick"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="wrap_content"/>

<Button

android:id="@+id/btnStop"

android:text="stop"

android:onClick="onClick"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="wrap_content"/>

</LinearLayout>

</RelativeLayout>

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

publicclassMainActivityextendsAppCompatActivity{

private AnimationDrawable animationDrawable;

@Override

protectedvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_frame_animation);

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

animationDrawable = (AnimationDrawable) view.getBackground();

}

publicvoidonClick(View v){

switch (v.getId()) {

case R.id.btnStart:

animationDrawable.start();

break;

case R.id.btnStop:

animationDrawable.stop();

break;

}

}

}

二:视图动画

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

1、透明度动画

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

2)、透明度动画实现

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

<?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android">

<alpha

android:fromAlpha="1.0"

android:toAlpha="0.1"

android:duration="1000" />

</set>

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

v.startAnimation(alphaAnimation);

2、缩放动画

1)、缩放动画效果展示

2)、缩放动画实现

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

<?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000">

<scale

android:fromXScale="1.0"

android:toXScale="0.75"

android:fromYScale="1.0"

android:toYScale="0.5"

android:pivotX="50%"

android:pivotY="50%"/>

</set>

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

v.startAnimation(scaleAnimation);

3、位移动画

1)、位移动画效果展示

2)、位移动画实现

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

<?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000">

<translate

android:fromXDelta="0"

android:toXDelta="50%p"

android:fromYDelta="0"

android:toYDelta="0"/>

</set>

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

v.startAnimation(translateAnimation);

4、旋转动画

1)、旋转动画效果展示

2)、旋转动画实现

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

<?xml version="1.0" encoding="utf-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000">

<rotate

android:fromDegrees="0"

android:toDegrees="360"

android:pivotX="50%"

android:pivotY="50%"

android:repeatMode="reverse"

android:repeatCount="infinite"/>

</set>

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

v.startAnimation(rotateAnimation);

三:属性动画

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

1、动画集

1)、动画集效果展示

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、视图动画和属性动画有什么区别?

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

以上是 Android学习之动画基础 的全部内容, 来源链接: utcz.com/a/19452.html

回到顶部