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