当前位置:操作系统 > 安卓/Android >>

【Android游戏开发十四】深入Animation,在Su易做图ceView中照样使用Android—Tween Anima

 

 之前在【Android2D游戏开发之四】中我给大家介绍了一张13帧的png的图,利用设置可视区域的方式来实现动画效果,但是这些属于我们自己来实现动画的方式,其实Android给我们的有两类自定义动画方式:

 

第一类:Frame By Frame 帧动画( 不推荐游戏开发中使用)

            所谓帧动画,就是顺序播放事先做好的图像,类似于放电影;

            分析: 此种方式类似我之前的那种利用设置可视区域的方式来实现动画效果,不仅类似而且还不如!所以此种方式在此不予分析;

 

第二类:Tween Animation 渐变动画

            即通过对对象不断做图像变换(平移、缩放、旋转)产生动画效果!实现方式其实就是预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。这些指令可以是以XML 文件方式定义,也可以是以源代码方式定义。程序沿着时间线执行这些指令就可以实现动画 效果。

 

  总结:那么在Android 游戏开发中我们优先选用两种方式:第一种设置可视区域的方式来实现动画效果(帧动画),需要童鞋们手动实现,那么在之前我的博文【Android2D游戏开发之四】中已经有了相应的源码!大家可以去下载研究;那么这里就主要为大家详细分析Tween Animation!

 

在讲述Su易做图ceView添加动画之前,我们先来看看在View中如何实现Tween Animation以及Tween 中的四种效果;

 

MyViewAnimation .java

 

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

package com.himi.frameAnimation;   

import android.content.Context;   

import android.graphics.Bitmap;   

import android.graphics.BitmapFactory;   

import android.graphics.Canvas;   

import android.graphics.Color;   

import android.graphics.Paint;   

import android.view.KeyEvent;   

import android.view.View;   

import android.view.animation.AlphaAnimation;   

import android.view.animation.Animation;   

import android.view.animation.RotateAnimation;   

import android.view.animation.ScaleAnimation;   

import android.view.animation.TranslateAnimation;   

/** 

 *@author Himi 

 *@AlphaAnimation 渐变透明度动画效果 

 *@ScaleAnimation 渐变尺寸伸缩动画效果 

 *@TranslateAnimation 画面转换位置移动动画效果 

 *@RotateAnimation 画面转移旋转动画效果 

 */   

public class MyViewAnimation extends View {   

    private Paint paint;   

    private Bitmap bmp;   

    private int x = 50;   

    private Animation mAlphaAnimation;   

    private Animation mScaleAnimation;    

    private Animation mTranslateAnimation;   

    private Animation mRotateAnimation;   

    public MyViewAnimation(Context context) {   

        super(context);   

        paint = new Paint();   

        paint.setAntiAlias(true);   

        bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);   

        this.setFocusable(true);//只有当该View获得焦点时才会调用onKeyDown方法    

    }   

    @Override   

    protected void onDraw(Canvas canvas) {   

        super.onDraw(canvas);   

        canvas.drawColor(Color.BLACK);   

        paint.setColor(Color.WHITE);   

        canvas.drawText("Himi", x, 50, paint);//备注1   

        canvas.drawText("方向键↑ 渐变透明度动画效果", 80, this.getHeight() - 80, paint);   

        canvas.drawText("方向键↓ 渐变尺寸伸缩动画效果", 80, this.getHeight() - 60, paint);   

        canvas.drawText("方向键← 画面转换位置移动动画效果", 80, this.getHeight() - 40, paint);   

        canvas.drawText("方向键→ 画面转移旋转动画效果", 80, this.getHeight() - 20, paint);   

        canvas.drawBitmap(bmp, this.getWidth() / 2 - bmp.getWidth() / 2,    

                this.getHeight() / 2 - bmp.getHeight() / 2, paint);   

        x += 1;   

    }   

    public boolean onKeyDown(int keyCode, KeyEvent event) {   

        if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {//渐变透明度动画效果   

            mAlphaAnimation = new AlphaAnimation(0.1f, 1.0f);   

            //第一个参数fromAlpha 为动画开始时候透明度   

            //第二个参数toAlpha 为动画结束时候透明度   

            //注意:取值范围[0-1];[完全透明-完全不透明]   

            mAlphaAnimation.setDuration(3000);   

            ////设置时间持续时间为3000 毫秒=3秒   

            this.startAnimation(mAlphaAnimation);   

        } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {//渐变尺寸伸缩动画效果   

      &

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,