1.動畫的過程偵聽java
public class MainActivity extends AppCompatActivity { private AnimationSet as; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); as = new AnimationSet(true); as.setDuration(1000); AlphaAnimation aa = new AlphaAnimation(0,1); //aa.setDuration(5000); as.addAnimation(aa); TranslateAnimation ta = new TranslateAnimation(200,0,200,0); // ta.setDuration(5000);//通過試驗,這句加不加都行 as.addAnimation(ta); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { as.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); view.startAnimation(as); } }); } }
添加了監聽的回調函數以後,實現三個方法,分別是動畫開始時執行……動畫結束後執行……動畫重複時執行……android
2.自定義動畫效果app
安卓只給開發者提供了四種動畫效果,雖然這幾個動畫效果能夠疊加,混合,可是這些效果仍是遠遠不能知足開發者的需求。因此咱們有必要去自定義動畫效果,創造無窮無盡的動畫效果。個人動畫效果,無窮無盡!ide
咱們在這裏自定義一個搖頭的動畫效果,一樣用一個按鈕實現。實現的效果來相似於輸錯密碼以後按鈕左右抖動的效果。函數
(1)新建一個類MyAnimation繼承Animation類動畫
MyAnimation.java:spa
import android.view.animation.Animation; import android.view.animation.Transformation; /** * Created by lzc on 16/7/4. */ public class MyAnimation extends Animation { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { System.out.println(interpolatedTime);//這句的意思是,在加載此類時,applyTrasformation會執行n屢次,輸出的效果時float類型的數據從0到1. //t.getMatrix().setTranslate(200*interpolatedTime,200*interpolatedTime);//這個方法自己是直接設定位置,因爲applyTrasformation在不斷執行,因此它也在不斷的設定位置,若是參數是200,200,它會從 //(0,0)直接跳到(200,200).可是若是乘了interpolatedTime,他就會慢慢位移到(200,200). t.getMatrix().setTranslate((float)(Math.sin(interpolatedTime*20)*50),0);//y軸不動,x軸呈現週期性移動 super.applyTransformation(interpolatedTime, t); } }
MainActivity.java:code
public class MainActivity extends AppCompatActivity{ private MyAnimation ma; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ma = new MyAnimation(); ma.setDuration(5000); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { view.startAnimation(ma); } }); } }
我終於體會到程序裏面數學的重要性了。實現一個週期性位移要用到三角函數,要調整振幅週期甚至相位,不學數學,玩個屁程序。不說了,學數學去了。orm