zoukankan      html  css  js  c++  java
  • Android简单逐帧动画Frame的实现(三)

     

    android之动画(三)通过AnimationDrawable控制逐帧动画 

     
     

    android与逐帧动画:

    效果图:

    当我们点击按钮时,该图片会不停的旋转,当再次点击按钮时,会停止在当前的状态。

    activity代码:

    1. package cn.com.chenzheng_java.animation;  
    2.   
    3. import android.app.Activity;  
    4. import android.graphics.drawable.AnimationDrawable;  
    5. import android.os.Bundle;  
    6. import android.view.View;  
    7. import android.widget.ImageView;  
    8. /** 
    9.  * @description android中的逐帧动画. 
    10.  * 逐帧动画的原理很简单,跟电影的播放一样,一张张类似的图片不停的切换,当切换速度达到一定值时, 
    11.  * 我们的视觉就会出现残影,残影的出现保证了视觉上变化的连续性,这时候图片的切换看在我们眼中就跟真实的一样了。 
    12.  * 想使用逐帧动画: 
    13.  * 第一步:需要在res/drawable文件夹下新建一个xml文件,该文件详细定义了动画播放时所用的图片、切换每张图片 
    14.  *        所用的时间、是否为连续播放等等。(有些文章说,在res/anim文件夹下放置该文件,事实证明,会出错哦) 
    15.  * 第二步:在代码中,将该动画布局文件,赋值给特定的图片展示控件,如本例子中的ImageView。 
    16.  * 第三步:通过imageView.getBackGround()获取相应的AnimationDrawable对象,然后通过该对象的方法进行控制动画 
    17.  * @author chenzheng_java 
    18.  * 
    19.  */  
    20. public class Animation1Activity extends Activity {  
    21.     ImageView imageView ;  
    22.     @Override  
    23.     public void onCreate(Bundle savedInstanceState) {  
    24.         super.onCreate(savedInstanceState);  
    25.         setContentView(R.layout.animation1);  
    26.           
    27.         imageView = (ImageView) findViewById(R.id.imageView_animation1);  
    28.         imageView.setBackgroundResource(R.drawable.animation1_drawable);  
    29.           
    30.     }  
    31.       
    32.       
    33.     public void myClickHandler(View targetButton){  
    34.         // 获取AnimationDrawable对象  
    35.         AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();  
    36.           
    37.         // 动画是否正在运行  
    38.         if(animationDrawable.isRunning()){  
    39.             //停止动画播放  
    40.             animationDrawable.stop();  
    41.         }  
    42.         else{  
    43.             //开始或者继续动画播放  
    44.             animationDrawable.start();  
    45.         }  
    46.           
    47.           
    48.     }  
    49. }  

    animation1.xml文件:

    [xhtml] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent" android:layout_height="match_parent"  
    4.     android:orientation="vertical">  
    5.     <Button  android:id="@+id/button_animation1" android:text="动画开始"  
    6.         android:layout_gravity="center_horizontal" android:layout_width="wrap_content"  
    7.         android:layout_height="wrap_content" android:onClick="myClickHandler"></Button>  
    8.     <ImageView android:id="@+id/imageView_animation1"  
    9.         android:layout_width="fill_parent"   
    10.         android:layout_height="wrap_content" android:layout_weight="1"></ImageView>  
    11. </LinearLayout>  

    存放动画文件的xml文件:

    [xhtml] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <!--   
    3.     根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画  
    4.     根标签下,通过item标签对动画中的每一个图片进行声明  
    5.     android:duration 表示展示所用的该图片的时间长度  
    6.  -->  
    7. <animation-list  
    8.   xmlns:android="http://schemas.android.com/apk/res/android"  
    9.   android:oneshot="false"  
    10.   >  
    11.     <item android:drawable="@drawable/a1" android:duration="50"></item>  
    12.     <item android:drawable="@drawable/a2" android:duration="50"></item>  
    13.     <item android:drawable="@drawable/a3" android:duration="50"></item>  
    14.     <item android:drawable="@drawable/a4" android:duration="50"></item>  
    15.     <item android:drawable="@drawable/a5" android:duration="50"></item>  
    16.     <item android:drawable="@drawable/a6" android:duration="50"></item>  
    17. </animation-list>  

    除此之外:在AnimationDrawable中,我们还可以看到如下的几个重要方法:

    setOneShot(boolean flag) 和在配置文件中进行配置一样,可以设置动画是否播放一次,false为连续播放;

    addFrame (Drawable frame, int duration) 动态的添加一个图片进入该动画中

     
  • 相关阅读:
    SaaS模式应用之多租户系统开发(单数据库多Schema设计)
    web-api POST body object always null
    linq to js 用法
    c#导出数据到csv文本文档中,数据前面的0不见了解决方法
    金蝶BOS元模型分析
    DotNet 资源大全中文版
    JavaScript中的类方法、对象方法、原型方法
    解决System.Data.SqlClient.SqlException (0x80131904): Timeout 时间已到的问题
    在需要隐藏navigationController控制器
    升级macOS Sierra系统 导致错误 app: resource fork, Finder information, or similar detritus not allowed
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4917544.html
Copyright © 2011-2022 走看看