Android动画进阶之一:Drawable Animation

 Android动画进阶之一:Drawable Animation

 

根据文档中的内容,如果意译的话,翻译为:帧动画。

(1)创建方法(根据文档的分类):

1, 创建一个Android xml文件,选择Drawable,选择animation-list

2, 指定每一帧的Drawable对象,并设置时长

代码如下:

  
  
  
  
  1. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:oneshot="true"> 
  3.     <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> 
  4.     <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> 
  5.     <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> 
  6. </animation-list> 

(2)使用:

         方式1Drawable Animation本身就是一个Drawable资源文件,所以直接在xml中设置为指定View的背景即可。animation.start().(注意事项见3-2)

 

         方式2通过View. setBackgroundResource(resID). animation.start().(注意事项见3-2)

 

(3) 注意:

        1一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下:   

  
  
  
  
  1. AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage.getBackground(); 

       

        2start()方法不能在onCreate()方法中调用。文档内容如下图所示: 

        AnimationDrawable并未完全的关联到Window,在onCreate()方法中,View并未完全显示(同理,在此方法中测量某个View的宽高,常得到0值。也同理SurfaceHolder要增加Callback方法)。在此,如果想最快的启动动画,使用监听方法onWindowFocusChanged()

 

More:突然想到,组件的宽高无法获得的原因可能是组件并未完全关联到Window测试:在此监听方法下,获取指定组件(TextView)的宽高。

Xml文件如下:

  
  
  
  
  1. <TextView 
  2.         android:id="@+id/textView" 
  3.         android:layout_width="50dip" 
  4.         android:layout_height="100dip" 
  5.         android:text="@string/special_character" /> 

代码如下:

  
  
  
  
  1. @Override 
  2.     public void onWindowFocusChanged(boolean hasFocus) { 
  3.         // TODO Auto-generated method stub 
  4.         super.onWindowFocusChanged(hasFocus); 
  5.          
  6.         specialCharacterStr = (String) mTextView.getText(); 
  7.         Log.d("special_character""specialCharacterStr is :" + specialCharacterStr); 
  8.          
  9.         int width = mTextView.getMeasuredWidth(); 
  10.         int height = mTextView.getMeasuredHeight(); 
  11.          
  12.         Log.d("window_focus""textview width is:" + width); 
  13.         Log.d("window_focus""textview height is:" + height); 
  14.          
  15.     } 

可以获得宽和高,如下图所示:

即只有当View完全关联到Window的情况下,才可以获得View的宽高和给View设置背景。但是获得分别是xml中指定的1.5倍,原因:在标准在标准密度(s=160dpi)的屏幕中1dip = 1px,在非标准密度(u)的屏幕中,得到的1dip=u/s px。查看了模拟器的相关参数,见下图:

问题解决。

 

 

你可能感兴趣的:(animation,animation-list)