安卓第十八天筆記--簡單動畫

来源:http://www.cnblogs.com/liunanjava/archive/2016/03/21/5250049.html
-Advertisement-
Play Games

載入使用AnimationUtils.load方法載入 一般都用代碼控制 如果需要 用XML控制可以在res\下建立 animator,即可, 在這個目錄建立XML文件如果 下方法導入



title:動畫

動畫

1.補間動畫

  1. Animation.ABSOLUTE:用於指定後面的數值是絕對值的像素。
  2. Animation.RELATIVETOSELF: 用於指定後面的數值是自己寬高的倍數
  3. Animation.RELATIVETOPARENT : 用於指定後面的數值是自己的父控制項寬高的倍數
  4. Animation.RESTART播放重新回到原點
  5. Animation.REVERSE播放回接著,反向播放

2.平移

fromXType  水平播放的類型
fromXValue 從哪開始,0表示現在的位置
toXType,   到什麼位置的類型
toXValue 到什麼坐標
fromYType 垂直播放的類型
fromYValue 從哪開始,0表示現在的位置
toYType 到什麼位置的類型
toYValue 到什麼坐標
TranslateAnimation translate = new TranslateAnimation(
            Animation.RELATIVE_TO_SELF, -2, 
            Animation.RELATIVE_TO_SELF, 2, 
            Animation.RELATIVE_TO_SELF, 0,
            Animation.RELATIVE_TO_SELF, 1);
    //設置顯示時間
    translate.setDuration(3000);
    //播放資源為無限迴圈
    translate.setRepeatCount(Animation.INFINITE);
    //播放模式,反轉播放,先順著播完,就反著播放
    translate.setRepeatMode(Animation.REVERSE);
    //哪個組件在播放,設置
    imageView.setAnimation(translate);
    //開始播放
    translate.start();

 

3.旋轉

/*
     * fromDegrees, 從什麼角度開始 0 從現在的 toDegrees, 270度 pivotXType, X中心點類型
     * Animation.RELATIVE_TO_SELF自身 pivotXValue, 中心點值 0.5表示這個圖片的一半置
     * pivotYType, Y中心點類型Animation.RELATIVE_TO_SELF自身
     *  pivotYValue 0.5f 
     */
    RotateAnimation rotate = new RotateAnimation(0, 360,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
            3);
    //播放顯示時間
    rotate.setDuration(5000);
    rotate.setRepeatCount(Animation.INFINITE);
    rotate.setRepeatMode(Animation.RESTART);

    imageView.setAnimation(rotate);
    rotate.start();

 

4.縮放

    /*
     * fromX, toX, 從坐標什麼地址開始到什麼坐標,0,表示當前 fromY, toY, 
     * pivotXType,  旋轉的中心點
     * pivotXValue, 類型, pivotYType, pivotYValue
     */
    ScaleAnimation scale = new ScaleAnimation(1, 2, 1, -2,
            Animation.RELATIVE_TO_SELF, -2, Animation.RELATIVE_TO_SELF, 3);

    // 播放顯示時間
    scale.setDuration(5000);
    scale.setRepeatCount(Animation.INFINITE);
    scale.setRepeatMode(Animation.RESTART);

    imageView.setAnimation(scale);
    scale.start();

 

5.透明度

    /*
     * fromAlpha,  從什麼透明度開始
     * toAlpha 到什麼透明度結束
     */
    AlphaAnimation alpha = new AlphaAnimation(1, 0);

    // 播放顯示時間
    alpha.setDuration(2000);
    alpha.setRepeatCount(Animation.INFINITE);
    alpha.setRepeatMode(Animation.REVERSE);

            imageView.setAnimation(alpha);
            alpha.start();
}

 

6.集合

就是建立一個
AnimationSet set = new AnimationSet();
set.addAnimation(scale);
    set.addAnimation(rotate);
    set.addAnimation(translate);
    set.start();

 


就可以播放多個動畫

7. XML配置

在res/目錄下建立anim文件目錄
 <!-- 
        如果平移的數值是數字,那麼表示的是絕對值
        如果是百分比,那麼表明是自己的寬高的倍數
        如果是百分比加上 p,那麼表明是自己的父元素的寬高的倍數
         -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate 
    android:fromXDelta="200%"
    android:toXDelta="200%"
    android:fromYDelta="-100%"
    android:toYDelta="200%"
    android:duration="4000"
    android:repeatCount="infinite"
    android:repeatMode="reverse"/>

    <rotate
       android:fromDegrees="0"
       android:toDegrees="360"
       android:toYScale="0.0"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="4000" 
       android:repeatCount="infinite"
       android:repeatMode="reverse"/>

</set>

 

載入使用AnimationUtils.load方法載入

Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_set);

    imageView.startAnimation(animation);

 

8.屬性動畫

一般都用代碼控制

/**
 * 水平
 * 
 * @param v
 */
public void translate(View v) {
    /**
     * 參數一: 誰去播放這個動畫 參數二: 屬性名字 想要改變x方向的移動 參數三:動畫執行的數值
     */
    ObjectAnimator objectAnimatrX = ObjectAnimator.ofFloat(imageView,
            "translationX", -50, 50);
    ObjectAnimator objectAnimatrY = ObjectAnimator.ofFloat(imageView,
            "translationY", 0, 60);

    objectAnimatrX.setDuration(2000);

    objectAnimatrX.setRepeatCount(ObjectAnimator.INFINITE);

    objectAnimatrX.setRepeatMode(ObjectAnimator.REVERSE);

    objectAnimatrX.start();




}

/**
 * 轉換
 * 
 * @param v
 */
public void rotate(View v) {
    ObjectAnimator rotateX = ObjectAnimator.ofFloat(imageView, "rotationX", 0,360);
    ObjectAnimator rotateY = ObjectAnimator.ofFloat(imageView, "rotationY", 0,360);
    rotateX.setDuration(3000);
    rotateX.setRepeatMode(Animation.REVERSE);
    //rotateX.setRepeatCount(Animation.INFINITE);
    rotateY.setDuration(3000);
    rotateY.setRepeatMode(Animation.REVERSE);
    //rotateY.setRepeatCount(Animation.INFINITE);

    AnimatorSet set  = new AnimatorSet();
    set.playSequentially(rotateX,rotateY);
    set.start();
}

/**
 * 綻放
 * 
 * @param v
 */
public void scale(View v) {
    ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 2.0f,5f);
    ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 2.0f,5f);
    scaleX.setDuration(3000);
    scaleX.setRepeatMode(Animation.REVERSE);
    scaleX.setRepeatCount(Animation.INFINITE);
    scaleY.setDuration(3000);
    scaleY.setRepeatMode(Animation.REVERSE);
    scaleY.setRepeatCount(Animation.INFINITE);

    AnimatorSet set = new AnimatorSet();
    set.playTogether(scaleX,scaleY);
    set.start();


}

/**
 * 透明
 * 
 * @param v
 */
public void alpha(View v) {

    ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f,0f);
    alpha.setDuration(3000);
    alpha.setRepeatMode(Animation.REVERSE);
    alpha.setRepeatCount(Animation.INFINITE);

    alpha.start();
}

/**
 * 集合
 * 
 * @param v
 */
public void set(View v) {
    /**
     * 參數一: 誰去播放這個動畫 參數二: 屬性名字 想要改變x方向的移動 參數三:動畫執行的數值
     */
    ObjectAnimator objectAnimatrX = ObjectAnimator.ofFloat(imageView,
            "translationX", -50, 100);
    ObjectAnimator objectAnimatrY = ObjectAnimator.ofFloat(imageView,
            "translationY", -70, 100);

    objectAnimatrX.setDuration(2000);

    //objectAnimatrX.setRepeatCount(ObjectAnimator.INFINITE);

    objectAnimatrX.setRepeatMode(ObjectAnimator.REVERSE);
    objectAnimatrY.setDuration(2000);

    //objectAnimatrY.setRepeatCount(ObjectAnimator.INFINITE);
    objectAnimatrY.setRepeatMode(ObjectAnimator.REVERSE);

    AnimatorSet set = new AnimatorSet();

    //set.playTogether(objectAnimatrX,objectAnimatrY);
    set.playSequentially(objectAnimatrX,objectAnimatrY);
    set.start();


}

 

如果需要 用XML控制可以在res\下建立 animator,即可, 在這個目錄建立XML文件如果 下方法導入

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 就在不長也不短的時間前,蘋果正式命令咱們要向NSURLSession看,因此我們不得不認認真真的聽從老大的教導,努力認知NSURLSession。其實呢,三方早已為我們解決了問題,但是呢,我們還是有必要大概瞭解一下NSURLSession。下麵呢,我就為大家簡單介紹NSURLSession。 *下麵
  • selector 選擇器 在App的使用中經常能看到selector的身影 如:一個按鍵看上去白色或者其它顏色,可能是一張圖片 按下去又顯示其它的顏色或者另外一張圖片 這裡使用shape配合使用 正常狀態 按下狀態 selector 佈局中引用 有圖片就去需要建立一個selector 在drawab
  • ListView可能是Android開發中最常用的一個控制項,但要用的純熟還需要不斷的鍛煉。 建立簡單的ListView 1.在佈局文件(.xml)中添加<ListView>標簽 2.在MainActivity.java中用適配器綁定 可以看到 數組內容無法直接加到ListView中,所以要用適配器。
  • 文章出自:聽雲博客 Reveal簡介: 這是個神奇的工具,它能常透徹地分析個App的UI結構。 這個工具包括兩部分,部分是在PC上運行的一個獨立應用,即Reveal.app,另一部分代碼在你要分析的某個App中,為此,Reveal提供了一個Framework和一個Dylib供使用。這兩部分之間通過B
  • shape 先看下,系統自帶的EditText和Button的外形 下麵看加了shape後的效果 簡單點講,shape可以為組件加上背景邊框,圓角之類的可以配合selector使用 shapeXXX.xml定義在drawable目錄下 EditText使用的 Button使用的定義的都 一樣 佈局中
  • java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx...}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from Curs
  • 如果想對自己自定義的類進行解檔和歸檔的話 必須遵循一個協議:NSCoding Student.h 文件 Student.m 文件 客戶端代碼 運行結果:
  • 此文章來自:聽雲博客 很多時候需要網路抓包分析,在iPhone上抓包稍有不同,下麵介紹三種常用的方式。分析工具以wireshark為例。 一、最簡單的方式:用PC作為熱點,在PC上抓包 優點:簡單 缺點:不能抓真機2g/3g/4g網路數據 步驟如下: 1、PC接上有線 2、PC用wifi方式共用網路
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...