標籤:android style blog http io ar java sp div
github上面有個例子很好的列舉了NineOldAndroids相容動畫的用法。下載了下來然後運行測試了下:
因為要引用nineoldandroids的項目,我這裡直接把它的原始碼拷貝進去了,用做測試。
android 11版本也有ObjectAnimator動畫屬性,但是不能相容10版本甚至8的版本號碼,國內這個版本號碼的手機份額還是不小的。所以相容也必須只有用這個開源的了。
static { PROXY_PROPERTIES.put("alpha", PreHoneycombCompat.ALPHA); PROXY_PROPERTIES.put("pivotX", PreHoneycombCompat.PIVOT_X); PROXY_PROPERTIES.put("pivotY", PreHoneycombCompat.PIVOT_Y); PROXY_PROPERTIES.put("translationX", PreHoneycombCompat.TRANSLATION_X); PROXY_PROPERTIES.put("translationY", PreHoneycombCompat.TRANSLATION_Y); PROXY_PROPERTIES.put("rotation", PreHoneycombCompat.ROTATION); PROXY_PROPERTIES.put("rotationX", PreHoneycombCompat.ROTATION_X); PROXY_PROPERTIES.put("rotationY", PreHoneycombCompat.ROTATION_Y); PROXY_PROPERTIES.put("scaleX", PreHoneycombCompat.SCALE_X); PROXY_PROPERTIES.put("scaleY", PreHoneycombCompat.SCALE_Y); PROXY_PROPERTIES.put("scrollX", PreHoneycombCompat.SCROLL_X); PROXY_PROPERTIES.put("scrollY", PreHoneycombCompat.SCROLL_Y); PROXY_PROPERTIES.put("x", PreHoneycombCompat.X); PROXY_PROPERTIES.put("y", PreHoneycombCompat.Y); }
支援的動畫屬性名稱有上面那些
支援上下移動的動畫執行個體:
@Overrideprotected void setupAnimation(View view) {// TODO Auto-generated method stub//getAnimatorSet().playTogether(//ObjectAnimator.ofFloat(view, "translationY", 0,-300).setDuration(500),//ObjectAnimator.ofFloat(view, "translationY", -300,300).setDuration(900)//);//getAnimatorSet().play(ObjectAnimator.ofFloat(view, "translationY", 0,-300).setDuration(500));getAnimatorSet().playSequentially(ObjectAnimator.ofFloat(view, "translationY", 0,-100).setDuration(400),ObjectAnimator.ofFloat(view, "translationY", -100,100).setDuration(800),ObjectAnimator.ofFloat(view, "translationY", 100,-100).setDuration(800),ObjectAnimator.ofFloat(view, "translationY", -100,100).setDuration(800),ObjectAnimator.ofFloat(view, "translationY", 100,0).setDuration(400));}
也可以用下面的方法:
@Override protected void setupAnimation(View view) { getAnimatorSet().playTogether( ObjectAnimator.ofFloat(view, "translationY", 0,-100,-200,-300,-200,-100,0,100,200,300,200,100,0, -100,-200,-300,-200,-100,0,100,200,300,200,100, 0).setDuration(4000), ObjectAnimator.ofFloat(view, "alpha", 1, 1).setDuration(mDuration*3/2) ); }
這裡的效果和上面的效果差不多,只不過是這裡分割了整段距離,可以把時間平分,
也就是用
playTogether這個方法也可以實現<pre name="code" class="java">playSequentially這個方法的效果。(播放動畫隊列,很好理解)
title = (TextView) findViewById(R.id.title); final BaseEffects animator = Effectstype.Slidetogether.getAnimator(); final Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message arg0) {// TODO Auto-generated method stubanimator.start(title);return true;}}); new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){try {Thread.sleep(8000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}handler.sendEmptyMessage(0);}}}).start();
直接對單個View播放動畫,如。
筆記先作到這裡,如果有錯誤的,還請各位大牛批評指正。
Write the code,Change the world!
複製去Google翻譯翻譯結果playSequentially
關於github上開源nineoldandroids相容動畫的筆記