<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Android特效專輯(七)——飛機升空特效,一鍵清理緩存,靈活運用屬性動畫 > 最近的幾篇博文反響還不錯,也會繼續的寫下去的,關于這些特效的專輯,大多數也是借鑒大神的,最近由于工作的關系,會深入的了解一下Android BLE與硬件設備的串口通訊相關的內容,也會時不時的分享出來,當然,大家是一起學習,我畢竟也是初學者,今天講的是小火箭的動畫效果,用到了基礎動畫做了一些偷梁換柱的事情,明天還是后天,再更新一個心型起泡飛舞的特效,就不會這么持續的更新特效專輯這一系列了,畢竟《Only》這個軟件也正在開發當中,最重要的還是交互,不是特效,特效多了反而會雞肋,并且機型適配方面可能導致一些不確定的因素也是有的,所以,這幾天可能會多分享一些藍牙相關的東西了,當然,會持續的更新Android實用案例這個系列,很多的Android技術等你一起來玩。 我們先來看看今天的效果圖吧: ### 截圖 ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c18d923e.jpg "") > 感覺是不是挺好玩的?其實,我其實就是用了三張圖片,用黑色背景我們看看這三張圖片 ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c190fdec.jpg "") ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c192a830.jpg "") ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c193b98f.jpg "") > 好的,知道了這三張圖片,我們在res文件下新建一個anim文件夾,然后把他們三個的動畫加上 ### cloud.xml ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="800" android:fromAlpha="0" android:startOffset="300" android:toAlpha="1.0" > </alpha> <translate android:duration="800" android:fromYDelta="100%" android:interpolator="@android:anim/accelerate_interpolator" android:startOffset="300" android:toYDelta="0%" /> <alpha android:duration="500" android:fromAlpha="1.0" android:startOffset="2050" android:toAlpha="0" > </alpha> <translate android:duration="650" android:fromYDelta="0%" android:startOffset="2050" android:toYDelta="100%" /> </set> ~~~ ### launcher.xml ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="100%" android:startOffset="2050" android:toYDelta="0%" /> <alpha android:duration="450" android:fromAlpha="1.0" android:startOffset="2250" android:toAlpha="0" > </alpha> </set> ~~~ ### rocket.xml ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromYDelta="100%" android:toYDelta="-5%p" /> <translate android:duration="500" android:fromYDelta="0%p" android:startOffset="500" android:toYDelta="4%p" /> <translate android:duration="500" android:fromYDelta="0%p" android:startOffset="1000" android:toYDelta="-1.5%p" /> <translate android:duration="300" android:fromYDelta="0%p" android:startOffset="1750" android:toYDelta="8%p" /> <translate android:duration="400" android:fromYDelta="0%p" android:interpolator="@android:anim/accelerate_interpolator" android:startOffset="2050" android:toYDelta="-108%p" /> </set> ~~~ ### activity_main.xml ~~~ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black" > <ImageView android:id="@+id/cloud" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@drawable/cloud" android:visibility="invisible" /> <ImageView android:id="@+id/launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:src="@drawable/launcher" android:visibility="invisible" /> <ImageView android:id="@+id/rocket" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:paddingLeft="8dp" android:src="@drawable/rocket" android:visibility="invisible" /> <Button android:id="@+id/getup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="啟動火箭" android:textColor="#ffffff" android:textSize="20dp" /> </RelativeLayout> ~~~ ~~~ 三個動畫,然后就是布局,一個按鈕啟動,然后三張圖片顯示出來并且出來一個動畫,是不是思路越來越清晰了? ~~~ ### MainActivity ~~~ package com.lgl.recht; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Handler mHandler = new Handler(); private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.getup); btn.setOnClickListener(this); } private void launcherTheRocket() { mHandler.postDelayed(new Runnable() { @Override public void run() { final View rocket = findViewById(R.id.rocket); //初始化 Animation rocketAnimation = AnimationUtils.loadAnimation( getApplicationContext(), R.anim.rocket); //設置動畫監聽 rocketAnimation .setAnimationListener(new VisibilityAnimationListener( rocket)); //開啟 rocket.startAnimation(rocketAnimation); final View cloud = findViewById(R.id.cloud); Animation cloudAnimation = AnimationUtils.loadAnimation( getApplicationContext(), R.anim.cloud); cloudAnimation .setAnimationListener(new VisibilityAnimationListener( cloud)); cloud.startAnimation(cloudAnimation); final View launcher = findViewById(R.id.launcher); Animation launcherAnimation = AnimationUtils.loadAnimation( getApplicationContext(), R.anim.launcher); launcherAnimation .setAnimationListener(new VisibilityAnimationListener( launcher)); launcher.startAnimation(launcherAnimation); } }, 150); } public class VisibilityAnimationListener implements AnimationListener { private View mVisibilityView; public VisibilityAnimationListener(View view) { mVisibilityView = view; } public void setVisibilityView(View view) { mVisibilityView = view; } //動畫開始 @Override public void onAnimationStart(Animation animation) { Log.i("START", "..."); if (mVisibilityView != null) { mVisibilityView.setVisibility(View.VISIBLE); // mVisibilityView.setVisibility(View.GONE); } } //動畫結束 @Override public void onAnimationEnd(Animation animation) { Log.i("END", "..."); if (mVisibilityView != null) { mVisibilityView.setVisibility(View.GONE); } } @Override public void onAnimationRepeat(Animation animation) { } } @Override public void onClick(View v) { //啟動 launcherTheRocket(); } } ~~~ ~~~ 好的,我們可以來運行一下了 ~~~ ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c1954c6c.jpg "") ~~~ 這里我們并沒有添加清理緩存的功能,我們在下面實現,這里提供一個工具類 ~~~ ### DataCleanManager ~~~ package com.lgl.data; import java.io.File; import java.math.BigDecimal; import android.content.Context; import android.os.Environment; /** * 本應用數據清除管理器 */ public class DataCleanManager { public static String getTotalCacheSize(Context context) throws Exception { long cacheSize = getFolderSize(context.getCacheDir()); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { cacheSize += getFolderSize(context.getExternalCacheDir()); } return getFormatSize(cacheSize); } public static void clearAllCache(Context context) { deleteDir(context.getCacheDir()); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { deleteDir(context.getExternalCacheDir()); } } private static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } return dir.delete(); } // 獲取文件 // Context.getExternalFilesDir() --> SDCard/Android/data/你的應用的包名/files/ // 目錄,一般放一些長時間保存的數據 // Context.getExternalCacheDir() --> // SDCard/Android/data/你的應用包名/cache/目錄,一般存放臨時緩存數據 public static long getFolderSize(File file) throws Exception { long size = 0; try { File[] fileList = file.listFiles(); for (int i = 0; i < fileList.length; i++) { // 如果下面還有文件 if (fileList[i].isDirectory()) { size = size + getFolderSize(fileList[i]); } else { size = size + fileList[i].length(); } } } catch (Exception e) { e.printStackTrace(); } return size; } /** * 格式化單位 * * @param size */ public static String getFormatSize(double size) { double kiloByte = size / 1024; if (kiloByte < 1) { return size + "Byte"; } double megaByte = kiloByte / 1024; if (megaByte < 1) { BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); return result1.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "KB"; } double gigaByte = megaByte / 1024; if (gigaByte < 1) { BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); return result2.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "MB"; } double teraBytes = gigaByte / 1024; if (teraBytes < 1) { BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); return result3.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "GB"; } BigDecimal result4 = new BigDecimal(teraBytes); return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"; } } ~~~ ### 使用方法 ~~~ private DataCleanManager dm; try { //緩存大小 tv.setText(dm.getTotalCacheSize(this)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //清理緩存 dm.clearAllCache(MainActivity.this); ~~~ ### 大伙覺得好的話,歡迎點個贊,嘿嘿! ### Demo下載地址:[http://download.csdn.net/detail/qq_26787115/9412013](http://download.csdn.net/detail/qq_26787115/9412013)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看