`
runfeel
  • 浏览: 935710 次
文章分类
社区版块
存档分类
最新评论

安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果

 
阅读更多

AlphaAnimation 透明效果实现:

activity_main.xml中仅仅是一个简单的图片,下面的例子都会使用这个xml:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <!-- 用于动画的图片 -->

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="70dp"
        android:layout_marginTop="138dp"
        android:src="@drawable/jhs_button1_h" />

</RelativeLayout>

透明效果的java代码:

package com.example.test.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        //图片点击的时候,启动动画效果  
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Animation anim = getAlphaAnimation();
                v.startAnimation(anim);
            }
        });

    }

    /**
     * 透明效果
     * @return
     */
    public Animation getAlphaAnimation() {
        //实例化 AlphaAnimation 主要是改变透明度
        //透明度 从 1-不透明 0-完全透明 
        Animation animation = new AlphaAnimation(1.0f, 0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

}

ScaleAnimation 缩放效果实现:

package com.example.test.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        //图片点击的时候,启动动画效果  
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Animation scalegetAnim = getScaleAnimation();
                v.startAnimation(scalegetAnim);
            }
        });

    }
    
    /**
     * 缩放动画
     * @return
     */
    public Animation getScaleAnimation() {
        //实例化 ScaleAnimation 主要是缩放效果
        //参数:fromX-动画开始前,x坐标   toX-动画结束后x坐标
        //fromY-动画开始前,Y坐标  toY-动画结束后Y坐标
        //pivotXType - 为动画相对于物件的X坐标的参照物   pivotXValue - 值
        //pivotYType - 为动画相对于物件的Y坐标的参照物   pivotYValue - 值
        Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, 
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

}

RotateAnimation 旋转效果实现:

package com.example.test.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        //图片点击的时候,启动动画效果  
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Animation rotateAnim = getRotateAnimation();
                v.startAnimation(rotateAnim);
            }
        });

    }
    
    /**
     * 旋转
     * @return
     */
    public Animation getRotateAnimation() {
        //实例化RotateAnimation
        //以自身中心为圆心,旋转360度 正值为顺时针旋转,负值为逆时针旋转
        RotateAnimation animation = new RotateAnimation(0, 360, 
                                        Animation.RELATIVE_TO_SELF, 0.5f,
                                        Animation.RELATIVE_TO_SELF, 0.5f);  
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

}

TranslateAnimation 移动效果实现:

package com.example.test.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        //图片点击的时候,启动动画效果  
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Animation translateAnim = getTranslateAnimation();
                v.startAnimation(translateAnim);
            }
        });

    }
    
    /**
     * 移动
     * @return
     */
    public Animation getTranslateAnimation() {
        //实例化TranslateAnimation
        //以自身为坐标系和长度单位,从(0,0)移动到(1,1)
        TranslateAnimation animation = new 
                TranslateAnimation(
                        Animation.RELATIVE_TO_SELF, 0.0f, 
                        Animation.RELATIVE_TO_SELF, 1.0f, 
                        Animation.RELATIVE_TO_SELF, 0.0f, 
                        Animation.RELATIVE_TO_SELF, 1.0f);  
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

}

AnimationSet 动画集合实现和使用:

package com.example.test.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        //图片点击的时候,启动动画效果  
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //AnimationSet类是一个Animation集合,里面可以许多Animation,
                //且在AnimationSet中设置的属性适用于里面的所有Animation。
                //参数true 则共享@Interpolator
                AnimationSet set = new AnimationSet(true);

                //透明
                Animation alphaAnim = getAlphaAnimation();
                set.addAnimation(alphaAnim);

                //缩放
                Animation scalegetAnim = getScaleAnimation();
                set.addAnimation(scalegetAnim);

                //旋转
                Animation rotateAnim = getRotateAnimation();
                set.addAnimation(rotateAnim);

                //移动 上面三个动画是同时进行的,我现在需要让移动这个动画在上面的动画之后执行
                //需要使用setStartOffset 设置动画开始的时间
                Animation translateAnim = getTranslateAnimation();
                translateAnim.setStartOffset(500);
                set.addAnimation(translateAnim);

                v.startAnimation(set);
            }
        });

    }

    /**
     * 透明效果
     * @return
     */
    public Animation getAlphaAnimation() {
        //实例化 AlphaAnimation 主要是改变透明度
        //透明度 从 1-不透明 0-完全透明 
        Animation animation = new AlphaAnimation(1.0f, 0.8f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

    /**
     * 缩放动画
     * @return
     */
    public Animation getScaleAnimation() {
        //实例化 ScaleAnimation 主要是缩放效果
        //参数:fromX-动画开始前,x坐标   toX-动画结束后x坐标
        //fromY-动画开始前,Y坐标  toY-动画结束后Y坐标
        //pivotXType - 为动画相对于物件的X坐标的参照物   pivotXValue - 值
        //pivotYType - 为动画相对于物件的Y坐标的参照物   pivotYValue - 值
        Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

    /**
     * 旋转
     * @return
     */
    public Animation getRotateAnimation() {
        //实例化RotateAnimation
        //以自身中心为圆心,旋转360度  正值为顺时针旋转,负值为逆时针旋转
        RotateAnimation animation = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

    /**
     * 移动
     * @return
     */
    public Animation getTranslateAnimation() {
        //实例化TranslateAnimation
        //以自身为坐标系和长度单位,从(0,0)移动到(1,1)
        TranslateAnimation animation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                1.0f, Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 1.0f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(1000);
        return animation;
    }

}

Interpolator 描述动画的速率:

安卓默认的Interpolator:

AccelerateInterpolator:动画开始时比较慢,然后逐渐加速。

DecelerateInterpolator:动画开始时比较快,然后逐渐减速。

AccelerateDecelerateInterpolator:动画开始时和结束时比较慢,中间过程加速。

LinearInterpolator:动画匀速进行。

CycleInterpolator:动画循环播放指定次数,速率沿着正弦曲线改变。

DecelerateInterpolator代码:主要实现getInterpolation ,也可以自定义

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.view.animation;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;

/**
 * An interpolator where the rate of change starts out quickly and 
 * and then decelerates.
 *
 */
public class DecelerateInterpolator implements Interpolator {
    public DecelerateInterpolator() {
    }

    /**
     * Constructor
     * 
     * @param factor Degree to which the animation should be eased. Setting factor to 1.0f produces
     *        an upside-down y=x^2 parabola. Increasing factor above 1.0f makes exaggerates the
     *        ease-out effect (i.e., it starts even faster and ends evens slower)
     */
    public DecelerateInterpolator(float factor) {
        mFactor = factor;
    }
    
    public DecelerateInterpolator(Context context, AttributeSet attrs) {
        TypedArray a =
            context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.DecelerateInterpolator);
        
        mFactor = a.getFloat(com.android.internal.R.styleable.DecelerateInterpolator_factor, 1.0f);
        
        a.recycle();
    }
    
    public float getInterpolation(float input) {
        float result;
        if (mFactor == 1.0f) {
            result = (float)(1.0f - (1.0f - input) * (1.0f - input));
        } else {
            result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor));
        }
        return result;
    }
    
    private float mFactor = 1.0f;
}

使用:

        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());

AnimationListener 监听器:

可以监听动画前,动画结束,动画repeat的时候的动作,对上面代码中的移动效果进行动画监听:

 /**
     * 移动
     * @return
     */
    public Animation getTranslateAnimation() {
        //实例化TranslateAnimation
        //以自身为坐标系和长度单位,从(0,0)移动到(1,1)
        TranslateAnimation animation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                1.0f, Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 1.0f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率 
        animation.setInterpolator(new DecelerateInterpolator());
        //设置重复动画
        animation.setRepeatCount(2); 
        //设置动画执行时间
        animation.setDuration(1000);
        //设置监听器
        animation.setAnimationListener(new AnimationListener() {
            
            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始前
                Toast.makeText(getBaseContext(), "Strart!", Toast.LENGTH_SHORT).show();  
            }
            
            @Override
            public void onAnimationRepeat(Animation animation) {
                //重复动画的时候,
                Toast.makeText(getBaseContext(), "Repeat!", Toast.LENGTH_SHORT).show();  
            }
            
            @Override
            public void onAnimationEnd(Animation animation) {
                // 结束动画的时候
                Toast.makeText(getBaseContext(), "End!", Toast.LENGTH_SHORT).show();  
                
            }
        });
        return animation;
    }




分享到:
评论

相关推荐

    Android动画效果--渐变动画

    在Android开发中,动画效果是提升用户体验的关键因素之一。渐变动画是Android动画体系中的一种基本类型,它可以为用户界面带来生动和动态的感觉。本文将深入探讨四种主要的渐变动画:Alpha(透明度)、Scale(缩放)...

    安卓开发引导页面动画效果

    在安卓中,实现动画效果主要依赖于Android Animation框架,包括Property Animation和View Animation两大部分。Property Animation系统是自Android 3.0(API level 11)引入的,提供了更强大的动画控制能力,而View ...

    安卓listview相关相关-通过Animation-list实现将图片进行逐帧动画的播放.rar

    本资源"安卓listview相关相关-通过Animation-list实现将图片进行逐帧动画的播放.rar"主要讲解了如何在ListView的项视图中利用Animation-list实现图片的逐帧动画效果。这种技术常见于游戏或者动态图标的设计中,可以...

    安卓Android源码——(Animation动画).rar

    本资源"安卓Android源码——(Animation动画).rar"很可能是针对Android平台动画实现的一份详细教程或示例代码集。 Android中的动画主要分为两大类:属性动画(Property Animation)和视图动画(View Animation)。...

    转载:Andorid小項目之--Animation四種動畫的圖片效果(附源碼)

    这篇博客文章“Android小项目之--Animation四种动画的图片效果(附源码)”详细讲解了如何在Android平台上实现四种不同的动画效果,包括平移动画、旋转动画、缩放动画以及淡入淡出动画。通过这些动画,开发者可以...

    android Animation动画实现loading效果

    在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要工具之一,特别是在创建加载(Loading)效果时。本文将深入探讨如何使用Android Animation来实现动态的Loading效果。 一、Android Animation概述 ...

    使用Animation-list实现等待加载动画效果

    在Android开发中,动画是提升用户体验的关键元素之一。`Animation-list`是Android系统提供的一种用于创建帧动画的视图,常用于实现等待加载、旋转图标等动态效果。本教程将详细讲解如何使用`Animation-list`来创建一...

    安卓动画效果相关-基于android旋转动画做的摇晃铃铛的动画效果代码很简单注释很简单可直接集成在项目中非常好用.rar

    在Android开发中,动画效果是提升用户体验的关键因素之一。这个压缩包文件提供的内容是一个基于Android旋转动画实现的摇晃铃铛的特效。这种动画效果可以让应用的交互更加生动有趣,适用于游戏、教育或者通知提示等...

    Android属性动画的实现(JAVA和XML)

    在Android开发中,属性动画(Property Animation)是一个强大的工具,用于创建丰富的动态效果。相比于旧式的视图动画(View Animation),属性动画系统允许开发者对对象的属性进行改变,并且这些改变能够在帧之间...

    安卓Animation实现APP引导用户点击动画

    在本示例中,我们主要关注的是View Animation,它是早期版本(API Level 8及以下)中的动画机制,主要通过改变View的位置、大小、透明度等属性来实现动画效果。 二、Animation的种类 1. TranslateAnimation:平移...

    Android动画效果--FrameByFrame动画

    "FrameByFrame动画"是Android动画的一种类型,它通过连续播放一系列图像来创建动态效果,类似于传统的电影制作方式。在这个主题中,我们将深入探讨如何在Android应用中实现帧动画,以及如何创建火焰效果。 一、...

    Android 用Animation-list实现逐帧动画

    在Android开发中,为了创建各种动态效果,如等待效果、WiFi信号搜索效果等,开发者经常需要用到`Animation-list`。这是一种特殊的帧动画资源,允许我们显示一系列的图片来形成连续的动画效果。本篇将深入讲解如何...

    Animation动画基础.pdf

    Android平台支持多种动画效果,主要分为两类:**基于XML的动画**与**基于Java代码的动画**。 1. **基于XML的动画**主要包括: - **alpha(渐变透明度动画效果)**:通过改变视图的透明度来实现动画效果。 - **...

    Android-ColoringLoading-一个用纯代码实现自动绘画效果动画的项目

    总的来说,ColoringLoading项目展示了如何通过纯代码在Android中创建复杂的自定义动画,这对于开发者深入理解Android动画系统和提高动态效果编程技巧非常有帮助。通过学习该项目,开发者可以掌握如何利用属性动画、...

    博客《Android动画之一:Drawable Animation》附带源码

    这篇博客《Android动画之一:Drawable Animation》深入探讨了如何利用Drawable资源创建动画,这是Android系统提供的基本动画类型之一。Drawable Animation主要适用于简单的帧动画,例如旋转、缩放或平移等效果。 在...

    安卓动画效果相关-Android动画图表.zip

    这个压缩包“安卓动画效果相关-Android动画图表.zip”包含了一些关于Android动画和图表实现的资源,可能是代码示例、文档或者库项目。 首先,我们来探讨Android中的动画系统。Android提供了两种主要类型的动画:...

    安卓动画效果相关-animation的结合蝴蝶飞的动画使用动画里面的几种类型.zip

    在安卓开发中,动画效果是提升用户体验的关键因素之一。这个压缩包文件“安卓动画效果相关-animation的结合蝴蝶飞的动画使用动画里面的几种类型.zip”似乎包含了一个实例项目,用于演示如何利用Android的animation ...

    Android 游戏开发之使用AnimationDrable实现Frame动画

    在Android游戏开发中,帧动画(Frame Animation)是一种常见的动态效果实现方式,它通过连续播放一系列静态图片来创建动画效果。本教程将聚焦于如何利用`AnimationDrawable`类来实现这种动画。`AnimationDrawable`是...

    android动画开发教程(超详细讲解付源代码)

    本教程将深入探讨Android动画开发,通过超详细的讲解和实际的源代码示例,帮助开发者们掌握这一技术。以下是对Android动画开发的一些核心知识点的详细阐述: 一、动画类型 Android提供两种主要的动画机制:属性动画...

Global site tag (gtag.js) - Google Analytics