必須花很多額外的時間去tune才能得到不錯的效果,
今天要來介紹一個library,使用他之後就可以讓我們輕鬆達到動態的效果,
先看一下效果吧..
接著看一下該如何實做出這麼神奇的功能吧
使用rebound library
mSpring = SpringSystem.create().createSpring() .setSpringConfig(ORIGAMI_SPRING_CONFIG) .addListener(new SimpleSpringListener() { @SuppressLint("NewApi") @Override public void onSpringUpdate(Spring spring) { doUpdate(); } });
這邊是先做init的動作,設定參數,當 mSpring的value更改時 listener就會被trigger,
@Override public void onClick(View v) { Log.d("Ted", "val " + mSpring.getEndValue()); if (mSpring.getEndValue() == 0) { mSpring.setEndValue(1); } else { mSpring.setEndValue(0); } }
當我在click時執行 setEndValue 1 或 0 ,
就會trigger listener, 接著我可以利用下面的function 取得動畫所需要的數值,並且執行動畫效果
double val = mSpring.getCurrentValue(); float Translate = (float) SpringUtil .mapValueFromRangeToRange(val, 0, 1, 300, 0); float Scale = (float) SpringUtil .mapValueFromRangeToRange(val, 0, 1, 3, 1); mImg.setTranslationX(Translate); mImg.setTranslationY(Translate); mImg.setScaleX(Scale); mImg.setScaleY(Scale);
如果仔細去看 Translate的值,以及Scale的值,可以發現他並不是線性的在變化,利用這些數值的變化,就可以產生特別的動畫效果,簡單的說 Spring其實只不過是個數值產生器(當然實作起來是有一定難度的),利用這個數值產生器,我們就可以輕易的製作出動畫效果。
沒有留言:
張貼留言