`
eagle0824
  • 浏览: 231181 次
  • 性别: Icon_minigender_1
  • 来自: 镇江
社区版块
存档分类
最新评论

andorid animation

阅读更多
animation 在android 系统中,是一种帧动画,前段时间遇到一个问题就是,一个完整的动画分为两部分,前面一部分,只播放一次,而后面一部分要循环播放。
第一反应,是分两个动画来做,第一部分,播放完后(仅一次),再播放后面一部分,这样来做可能有个衔接问题(没试过,有兴趣的朋友可以试一下)
后来,还是采用一个动画来做。这其中用到了java中的反射,取得了DrawableAnimation中的私有成员变量mCurFrame来记录当前帧。
具体代码,大家可以参考如下:
(1)自定义一个ImageView
package com.archermin.animationtest;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;


import java.lang.reflect.Field;

public class MyAnimationImageView extends ImageView {

    public AnimationDrawable mAnimationDrawable;
    public Field field;

    public MyAnimationImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        try{
            field = AnimationDrawable.class.getDeclaredField("mCurFrame");
            field.setAccessible(true);
            int curFrame = field.getInt(mAnimationDrawable);
            Log.d("anim", "curFrame is : "  + curFrame);
            if(curFrame == 17){
                field.setInt(mAnimationDrawable, 6);
                Log.d("anim","set current animation is 6");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}


主界面代码如下:
package com.archermin.animationtest;


import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class AnimationTest extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private Context mContext;
    private AnimationDrawable mDownloadImageAnim;
    public static final String TAG = "AnimationTest";
    private Button btStart;
    private Button btStop;
    private Handler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = this;
        btStart = (Button)findViewById(R.id.bt_start);
        btStart.setOnClickListener(this);
        btStop = (Button)findViewById(R.id.bt_stop);
        btStop.setOnClickListener(this);
        mDownloadImageAnim = (AnimationDrawable)mContext.getResources().getDrawable(R.anim.download_dialog_animation);
        MyAnimationImageView imageView = (MyAnimationImageView)findViewById(R.id.download_image);
        imageView.setBackgroundDrawable(mDownloadImageAnim);
        imageView.mAnimationDrawable = mDownloadImageAnim;
        mHandler = new Handler();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mHandler.postDelayed(new StartAnimationRunnable(),500);
    }

    private class StartAnimationRunnable implements Runnable{
        @Override
        public void run() {
            // TODO Auto-generated method stub
            startAnimation();
        }
    }

    private class StopAnimationRunnable implements Runnable{
        @Override
        public void run() {

            stopAnimation();
        }
    }

    private void startAnimation(){
        if(mDownloadImageAnim != null){
            mDownloadImageAnim.stop();
            Log.d(TAG, "start animation ");
            mDownloadImageAnim.start();
        }
    }

    private void stopAnimation(){
        if(mDownloadImageAnim != null){
            Log.d(TAG, "stop animation ");
            mDownloadImageAnim.stop();
        }
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            case R.id.bt_start:
                startAnimation();
                break;
            case R.id.bt_stop:
                stopAnimation();
                break;
            default:
                break;
        }
    }
}

完整的实例代码在压缩包中!
分享到:
评论

相关推荐

    Android Animation Demo

    `Android Animation Demo`是一个实例,它展示了如何在Android应用中实现各种动画效果。这篇详细讲解将围绕标题和描述中的知识点展开,包括Tween Animation(补间动画)和Frame Animation(帧动画),帮助开发者理解...

    Android Animation动画资源文件

    Android Animation主要分为两大类:补间动画(Tween Animation)和帧动画(Frame Animation)。本资源文件主要关注补间动画,这是一种通过改变对象属性(如位置、大小、透明度等)在一段时间内平滑过渡的动画效果。 补...

    Android Animation Demo合集

    在Android开发中,动画(Animation)是提升用户体验和视觉吸引力的重要工具。本"Android Animation Demo合集"旨在展示多种动画效果,包括系统内置动画以及自定义动画的实现。以下将详细解析这个Demo中的关键知识点: ...

    android Animation动画实现loading效果

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

    Android Animation学习笔记

    Android Animation的学习涵盖了多种技术,包括属性动画(Property Animation)、视图动画(View Animation)以及过渡动画(Transition Animation)。下面将详细介绍这些概念及其应用。 1. 视图动画(View Animation...

    Android Animation

    ### Android Animation:初学者指南 #### 一、前言与背景介绍 《Android Animation:初学者指南》是一本专门针对Android平台上的动画开发技术进行深入讲解的书籍。本书旨在帮助开发者掌握Android平台上各种动画...

    android Animation图片渐变动画 Demo

    首先,"android Animation图片渐变动画"指的是在Android平台上,通过编程方式让图片从一种状态平滑地过渡到另一种状态,这通常涉及到Alpha(透明度)动画、Scale(缩放)动画、Rotate(旋转)或Translate(平移)...

    Android animation图片移动效果.zip

    "Android animation图片移动效果.zip"这个压缩包文件显然包含了一个关于如何在Android平台上实现图片移动动画的示例代码。在这个项目中,开发者可能通过XML或者Java代码来创建动画效果,使得图片能够在屏幕上平滑地...

    Androidanimation图片移动效果.zip

    综上所述,Androidanimation图片移动效果涉及了Android动画的多个方面,从简单的视图动画到复杂的属性动画和自定义动画,都可以实现丰富的动态效果。这个压缩包中的示例代码可能涵盖了这些技术,通过学习和实践,...

    android animation

    "android animation"这个主题主要关注的是Android系统中的动画实现,特别是与加载动画相关的技术。加载动画通常用于指示应用程序正在进行后台处理,如数据加载、网络请求或者计算等,给用户以视觉反馈,提高应用的可...

    Android animation图片移动效果.rar

    在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要手段之一。"Android animation图片移动效果.rar"这个压缩包包含的资源显然与在Android应用中实现图片移动的动画效果有关。下面,我们将深入探讨...

    Android Animation动画Demo源码.rar

    在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要工具。这个“Android Animation动画Demo源码”压缩包提供了一系列示例代码,用于展示Android系统中不同类型的动画效果及其实现方式。通过深入理解...

    Android animation的结合蝴蝶飞的动画,使用动画里面的几种类型-IT计算机-毕业设计.zip

    这个压缩包"Android animation的结合蝴蝶飞的动画,使用动画里面的几种类型-IT计算机-毕业设计.zip"包含了一个Android应用源码Demo,专门展示了如何利用Android内置的动画机制创建一个蝴蝶飞舞的效果。这个案例非常...

    Android Animation之TranslateAnimation(平移动画)

    Android Animation之TranslateAnimation(平移动画) Android Animation中的一种常用动画效果是TranslateAnimation(平移动画),它可以使图像或其他视图从一个位置移动到另一个位置。下面将详细介绍...

Global site tag (gtag.js) - Google Analytics