編輯:關於Android編程
最近看了淘寶手機端的有些頁面是類似下面這個小球的加載效果。後來了解了下,淘寶是直接一個gif圖片實現效果的,這當然是最簡單的方法。為了加深了解屬性動畫,這次就做個類似的效果。這依舊由幾個簡單的屬性動畫組合在一起,所有動畫都在代碼裡實現了。看注釋就好。
上個效果圖:
實現代碼:
小球圓圈的XML文件 drawable_dot.xml:
Activity的布局文件,就是一個ImageView:
package com.alextam.circlemoveball; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.media.Image; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; /** * @author Alex Tam */ public class MainActivity extends ActionBarActivity { private ImageView imv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imv1= (ImageView)findViewById(R.id.imv_tb_dot1); setCircleMoveBall(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * 設置小球動畫 */ private void setCircleMoveBall() { ValueAnimator animatorMove = ValueAnimator.ofInt(0,200); animatorMove.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { imv1.setTranslationX((Integer) animation.getAnimatedValue()); } }); animatorMove.setDuration(1000); ValueAnimator animatorMoveScale = ValueAnimator.ofFloat(0.0f,100.0f); animatorMoveScale.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float)animation.getAnimatedValue(); //將動畫的小球運動分解為2部,當0.0f - 50.0f小球變大,後面一半50.0f-100.0f小球從大恢復正常 //這裡效果看起來是小球從平面向屏幕彈起的樣子 if(value<= 50.0f) { imv1.setScaleX(1.0f + value/50); imv1.setScaleY(1.0f + value/50); } else { imv1.setScaleX(1.0f - (value - 100.0f)/50); imv1.setScaleY(1.0f - (value - 100.0f)/50); } } }); animatorMoveScale.setDuration(1000); ValueAnimator animatorBackMove = ValueAnimator.ofInt(200,0); animatorBackMove.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { imv1.setTranslationX((Integer) animation.getAnimatedValue()); } }); animatorBackMove.setDuration(2000); ValueAnimator animatorBackScale = ValueAnimator.ofFloat(0.0f,-100.0f); animatorBackScale.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float)animation.getAnimatedValue(); float vluA,vluB; //同樣是將小球分解兩步,效果就是動畫中的往後變小,透明度逐漸變低,然後恢復正常大小和透明度的效果 if( value > -50.0f && value < 0) { vluA = 1.1f + value/50; imv1.setAlpha(vluA); imv1.setScaleX(vluA); imv1.setScaleY(vluA); } else { vluB = 0.1f - (value + 50.0f)/50; imv1.setAlpha(vluB); imv1.setScaleX(vluB); imv1.setScaleY(vluB); } } }); animatorBackScale.setDuration(2000); final AnimatorSet set = new AnimatorSet(); //設置幾個動畫的運動規則 set.play(animatorMove).with(animatorMoveScale); set.play(animatorMoveScale).before(animatorBackMove); set.play(animatorBackMove).with(animatorBackScale); set.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { //在這裡實現重復運動 set.start(); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); set.start(); } }
之前寫過一篇關於Android 繼承DialogFragment彈出dialog對話框一,這次是在上次的基礎上修改了一些東西,就是怎樣在DialogFragment中獲取
前言:ListView——列表,它作為一個非常重要的顯示方式,不管是在Web中還是移動平台中,都是一個非常好的、不開或缺的展示信息的工具。在And
前兩天,一張小米的宣傳海報在網上曝光,海報中是小米剛簽下的紅米代言人之一劉昊然,而亮點在於他手中的手機,這部手機采用了雙攝像頭設計,應該是一部還未發布的紅米
本文實例講述了Android編程實現自定義輸入法功能。分享給大家供大家參考,具體如下:對於Android用戶而言,一般都會使用第三方的輸入法。可是,在輸入密碼時(尤其是支