Android中的动画(一)

Android中的动画有三种:View动画,帧动画,属性动画。

View动画

View动画有四种效果:平移、缩放、旋转、透明度。

可以通过xml的形式定义动画,在res/anim/下新建xml动画文件

这里写图片描述

  • 平移动画:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="500"
    android:toYDelta="300" />

fromXDelta:起始点X坐标
fromYDelta:起始点Y坐标
toXDelta:结束点X坐标
toYDelta:结束点Y坐标

  • 缩放动画
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.3"
    android:toYScale="0.5" />

fromXScale:起始长度比例
fromYScale:起始高度比例
toXScale:结束长度比例
toYScale:结束高度比例
pivotX:缩放中心点X坐标位置
pivotY:缩放中心点Y坐标位置

  • 旋转动画
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />

fromDegrees:起始角度
toDegrees:结束角度
pivotX:旋转中心X坐标位置
pivotY:旋转中心Y坐标位置

  • 透明度动画
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:toAlpha="0.3" />

fromAlpha:起始透明度
toAlpha:结束透明度

  • 多种动画组合使用
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="3000">

    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100"
        android:toYDelta="200" />

    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />

    <alpha
        android:fromAlpha="1"
        android:toAlpha="0.5" />

    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />

</set>

fillAfter:结束后状态 true-保留动画结束的状态 false-恢复到起始状态
duration:动画时长

在Activity中使用测试动画效果,首先建一个布局

<?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"
    tools:context="com.test.animation.MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="100dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/translate"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="平移" />

        <Button
            android:id="@+id/scale"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="缩放" />

        <Button
            android:id="@+id/rotate"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="旋转" />

        <Button
            android:id="@+id/alpha"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="透明度" />

        <Button
            android:id="@+id/set"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="组合" />

    </LinearLayout>

</RelativeLayout>

是这个样子的
这里写图片描述

完成逻辑,这里用了ButterKnife来绑定控件和点击事件

package com.test.animation;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @InjectView(R.id.iv)
    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }


    @OnClick({R.id.translate, R.id.scale, R.id.rotate, R.id.alpha, R.id.set})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.translate:
                setAnimation(R.anim.anim_translate);
                break;
            case R.id.scale:
                setAnimation(R.anim.anim_scale);
                break;
            case R.id.rotate:
                setAnimation(R.anim.anim_rotate);
                break;
            case R.id.alpha:
                setAnimation(R.anim.anim_alpha);
                break;
            case R.id.set:
                setAnimation(R.anim.set_anim);
                break;
        }
    }

    private void setAnimation(int resId) {
        Animation anim = AnimationUtils.loadAnimation(this, resId);
        anim.setFillAfter(true);
        anim.setDuration(3000);
        iv.startAnimation(anim);
    }
}

源码地址:我是传送门!!

更详细的View动画各属性及用法介绍可以参考:
Android应用开发之所有动画使用详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值