學習Jammendo代碼的心路曆程(一)簡單的淡出效果實現,jammendo心路曆程

來源:互聯網
上載者:User

學習Jammendo代碼的心路曆程(一)簡單的淡出效果實現,jammendo心路曆程

  最近在看 Jammendo代碼,打算將學習過程簡單的記錄下來,下面開始第一篇:

  開啟Jammendo運行之後,出彈出一個對話方塊,跳過對話方塊之後,會有一個淡出介面跳轉到首頁效果的實現。那麼這個效果是怎麼實現的呢,其實就是Animation中動畫淡出的效果——原理大概是layout不透明變成全透明這樣一個原理。

  我這裡用到的自訂endAnimation,是執行的動畫效果,這裡找到我事先寫好的fade_out.xml,也就是一個簡單的淡出效果實現:
<?xml version="1.0" encoding="utf-8"?>  <set xmlns:android="http://schemas.android.com/apk/res/android">     <alpha     android:fromAlpha="1.0"     android:toAlpha="0.0"     android:duration="500"     />  </set> 

  fromAlpha為動畫起始透明度,toAlpha是動畫結束透明度,duration顧名思義也就是動畫期間,當然有淡出也會有淡入,編寫原理差不多,網上有相關代碼,也可以自己去尋找一下,很簡單。

  OK,看完上面的動畫xml檔案之後。。下面開始看在Activity中代碼應該如何編寫

  在這裡,我利用Handler和Runnable實現簡單的動畫淡出效果,android中動畫效果是基於Animation來實現的,簡單的說下實現的淡出效果實現

1 public class SplashscreenActivity extends Activity { 2 private Animation endAnimation; 3 private Handler endAnimationHandler; 4 private Runnable endAnimationRunnable; 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 // TODO Auto-generated method stub 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.splashlayout); 10 endAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out);11 endAnimation.setFillAfter(true);12 13 endAnimationHandler = new Handler();14 endAnimationRunnable = new Runnable() {15 @Override16 public void run() {17 findViewById(R.id.splashlayout).startAnimation(endAnimation);18 }19 };20 21 endAnimation.setAnimationListener(new AnimationListener() {22 @Override23 public void onAnimationStart(Animation animation) { }24 25 @Override26 public void onAnimationRepeat(Animation animation) { }27 28 @Override29 public void onAnimationEnd(Animation animation) {30 // HomeActivity.launch(SplashscreenActivity.this);31 // SplashscreenActivity.this.finish();32 }33 });34 35 endAnimationHandler.removeCallbacks(endAnimationRunnable);36 endAnimationHandler.postDelayed(endAnimationRunnable, 2000);37 }38 39 }SplashScreenActivity  首先我定義了一個endAnimation,endAnimation是執行的動畫效果,這裡找到我事先寫好的fade_out.xml,也就是一個簡單的淡出效果實現,然後利用AnimationUtils.loadAnimation載入編寫好的動畫效果。  在這裡有一個SetFillAfter(true)函數,我搜了一下資料,大概解釋是這樣的:  SetFillAfter()方法用於設定一個動畫執行完畢後,View對象保留在中指的位置,如果設定為false,表示使能,也就是不會停留在終止位置,在這裡我們設定為false。  之後定義的一個endAnimationHadler和一個endAnimationRunnable,是具體調用這個動畫的線程,Handler處理多線程的時候通常用Runnable介面,關於這個我也不太懂,就不多提。  
  endAnimationHandler = new Handler();
  endAnimationRunnable = new Runnable() {
    public void run() { findViewById(R.id.splashlayout).startAnimation(endAnimation); } };

 

具體的動畫效果調用將會在endAnimationRunnable的Run()方法中實現,可以看到在run方法中,我利用findViewById找到了一個splashlayout,這個splashlayout是當前activity布局中layout資源的id,而不是整個xxx.xml檔案的id。在之前的過程中,很長時間發現工程無法運行,後來發現我一直用的是R.layout.splashlayout。這裡需要注意,我們添加的不是xml布局,而是xxx.xml檔案中layout資源的id。如下所示: 
<LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/splashlayout"    xmlns:android="http://schemas.android.com/apk/res/android">    <TextView        android:id="@+id/splashtextview"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello_world"        ></TextView></LinearLayout>
   接下來就是為endAnimation實現一些onAnimationStart,onAnimationRepeat,onAnimationEnd回調方法,在onAnimationEnd方法中,也就是動畫效果結束之後,我們可以執行一些自定的事件,例如頁面的跳轉等。  上面過程完成之後,就可以調用Hadler來執行我們完成的動畫淡出效果了,代碼如下:
 endAnimationHandler.removeCallbacks(endAnimationRunnable);  endAnimationHandler.postDelayed(endAnimationRunnable, 2000);

OK,上面就是一個簡單淡出效果的實現,寫於4月6日 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.