anroid Api demo自帶的一個shake(搖頭)效果

jia635發表於2014-04-26



下面是anroid Api demo自帶的一個shake(搖頭)效果   


   




public   class  Animation1  extends  Activity  implements  View.OnClickListener {  
  
    @Override   
    public   void  onCreate(Bundle savedInstanceState) {  
        super .onCreate(savedInstanceState);  
        setContentView(R.layout.animation_1);  
  
        View loginButton = findViewById(R.id.login);  
        loginButton.setOnClickListener(this );  
    }  
  
    public   void  onClick(View v) {  
        Animation shake = AnimationUtils.loadAnimation(this , R.anim.shake);  
        findViewById(R.id.pw).startAnimation(shake);  
    }  
  



anim資料夾下建立一個shake.xml


<? xml   version = "1.0"   encoding = "utf-8" ?>   
< translate   xmlns:android = "http://schemas.android.com/apk/res/android"  

 android:fromXDelta = "0"   

android:toXDelta = "10"   android:duration = "1000"   android:interpolator = "@anim/cycle_7"   />  

再在該資料夾下建立一個cycle_7.xml  

<? xml   version = "1.0"   encoding = "utf-8" ?>   
< cycleInterpolator   xmlns:android = "http://schemas.android.com/apk/res/android"   android:cycles = "7"   />   


Android混合型動畫AnimationSet  


public   void  onCreate(Bundle savedInstanceState) {  
    super .onCreate(savedInstanceState);  
   
    // 要使用findViewById, 一定要使用layout / *.xml 做為使用者介面   
    setContentView( R.layout.main );  
   
    // 取得UI 介面中的View 物件   
    // 取得View 物件後,再透過轉換成實際的物件   
    ImageView ivPic = (ImageView)this .findViewById(R.id.widget10);   //底圖   
    ImageView iv = (ImageView)this .findViewById(R.id.widget28);  
   
    // 設定ImageView 的圖片來源   
    ivPic.setImageResource( R.drawable.a2 );  
    iv.setImageResource( R.drawable.icon );  
   
    // 透明度動畫設定(startAlpha, endAlpha)   
    Animation am1 = new  AlphaAnimation (  1 ,  0  );  
    // 動畫開始到結束的執行時間(1000 = 1 秒)   
    am1. setDuration ( 2000  );  
    // 動畫重複次數(-1 表示一直重複)   
    am1. setRepeatCount ( -1  );  
   
    // 旋轉動畫設定(startAngle, endAngle, rotateX, rotateY)   
    Animation am2 = new  RotateAnimation (  0 ,  360 ,  30 ,  30  );  
    // 動畫開始到結束的執行時間(1000 = 1 秒)   
    am2. setDuration ( 2000  );  
    // 動畫重複次數(-1 表示一直重複)   
    am2. setRepeatCount ( -1  );  
   
    // 動畫集合   
    AnimationSet am = new  AnimationSet (  false  );  
    am. addAnimation ( am1 );  
    am. addAnimation ( am2 );  
   
    // 圖片配置動畫   
    iv. setAnimation (am);  
   
    // 動畫開始   
    am. startNow ();  
}  


附:android中所有的interpolator   (變化率)
android平臺提供瞭如下的interpolater  
AccelerateDecelerateInterpolator  
AccelerateInterpolator  
CycleInterpolator  
DecelerateInterpolator  
LinearInterpolator  
AnticipateInterpolator  
AnticipateOvershootInterpolator  
BounceInterpolator  
OvershootInterpolator  
這些interpolater實現的是  
android.view.animation.Interpolator介面  
該介面只有一個方法  
getInterpolation(float num)  
也就是不同的interpolater計算出的值不一樣,比如:  
public float getInterpolation(float input)  
{  
if (mFactor == 1.0f)  
{  
return (float)(input * input);  
}  
else  
{  
return (float)Math.pow(input, 2 * mFactor);  
}  
}  
當輸入的值為1時候,那麼返回值是平方,否則返回立方的值。  
其實interpolator是按照這種方式計算的  
This interpolator’s goal is to provide a multiplication factor given a time interval  
based on a hyperbolic curve。  
基於雙曲線計算時間的間隔,進行相關的動畫處理。  
比如常用的accelerator_interpolator其xml定義的結構為:  
<accelerator xmlns:android="http://schemas.android.com/apk/res/android"  
factor="1" /> 其乘數為1;基於此進行計算。  

相關文章