android---動畫入門(一)

来源:https://www.cnblogs.com/xkd-/archive/2019/02/21/10413855.html
-Advertisement-
Play Games

android 動畫分為兩類,View Animation(視圖動畫)和property Animation(屬性動畫),View Animation(視圖動畫)包含了Tween Animation和Frame Animation, property Animation包含Value Animati ...


android 動畫分為兩類,View Animation(視圖動畫)和property Animation(屬性動畫),View Animation(視圖動畫)包含了Tween Animation和Frame Animation, property Animation包含Value Animation和ObjectAnimation.

  1. View Animation(視圖動畫)
    1. Tween Animation
    2. Frame Animation
  2. property Animation(屬性動畫)
    1. Value Animation
    2. ObjectAnimation

Animation類是所有動畫(scale,alpha,translate,rotate)的基類,所有派生自Animation的類都具有它的一些公用屬性

  1. android:duration : 一次動畫的時間
  2. android:fillBefore:動畫結束是否恢復到開始前的狀態,true 是
  3. android:fillAftre:動畫結束是否保持結束時的狀態,true 是
  4. android:fillEnable: 同 android:fillBefore
  5. android:repeatCount: 動畫執行次數,(在set標簽下無效,要設置到具體動畫中)
  6. android:repeatMode:動畫重覆執行的模式:reverse 倒序回放,restart重新播放
  7. android:interpolator: 設置插值器
  8. android:startOffset: 延時多少毫秒開始動畫

Tween Animation(補間動畫)

  1. alpha   透明度漸變
  2. scale   放縮
  3. translate   移動
  4. rotate   旋轉
  5. set   自定義組合動畫

動畫的調用方式有兩種,xml標簽實現和代碼實現

(一):alpha   透明度漸變

  alpha 動畫特有的兩個屬性:

  1. android:fromAlpha="1"  動畫開始時候的透明度,0~1:0表示完全透明,1表示完全不透明
  2. android:toAlpha="0.1"  動畫結束時候的透明度

舉個慄子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:fromAlpha="1"
 4     android:toAlpha="0.1"
 5     android:duration="2000" 
 6     android:repeatCount="5"
 7     android:repeatMode="reverse"
 8     >
11 </alpha>

(二):scale   放縮漸變

  scale   動畫特有的屬性:

  1. android:fromXScale="1"  動畫開始時,控制項在X軸方向上的比例,1表示自身比例,0.5表示自身比例的一半,2表示自身的兩倍
  2. android:toXScale="1.4"  動畫結束時,控制項在X軸方向上的比例,值同上
  3. android:fromYScale="0.4"
  4. android:toYScale="1.4"
  5. android:pivotX="50%"  縮放起始點X軸坐標,值有三種格式,數值,百分比,百分數p,具體含義在註里解釋
  6. android:pivotY="50%"  縮放起始點Y軸坐標

:縮放起始點:預設是控制項左上角的點為起始點,  數值 表示 左上角坐標點+這個數值 為起始點,百分比  表示 左上角坐標點+ 自身寬度或高度的值的百分比,百分數p 表示左上角坐標點+這個控制項的父控制項的寬高乘以這個百分比

舉個慄子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <scale xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:fromXScale="0.4"
 4     android:toXScale="1.4"
 5     android:fromYScale="0.4"
 6     android:toYScale="1.4"
 7     android:pivotX="50%"
 8     android:pivotY="50%"
 9     android:repeatCount="3"
10     android:repeatMode="reverse"
11     android:duration="3000"
12     android:fillAfter="true"
13 
14     >
15 
16 </scale>

 

(二):translate   移動

  translate 動畫特有的屬性:

  1. android:fromXDelta="0" X軸開始坐標
  2. android:toXDelta="80%p"  X軸結束坐標, 值可以是數值,百分比,百分比p
  3. android:fromYDelta="0"
  4. android;toYDelta="80%"

舉個慄子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <translate xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:fromXDelta="0"
 4     android:toXDelta="80%p"
 5     android:fromYDelta="0"
 6     android:toYDelta="80%p"
 7     android:duration="2000"
 8     android:repeatCount="3"
 9     android:repeatMode="reverse"
10     android:startOffset="1000"
11     >
12 
13 </translate>

 

(二):rotate 旋轉漸變

  rotate 動畫特有的屬性:

  1. android:fromDegrees="0" 動畫開始旋轉的角度,三點鐘方向為0°,6點鐘方向為90°
  2. android:toDegrees="180" 動畫結束旋轉的角度
  3. android:pivotX="50%"   旋轉的圓心坐標
  4. android:pivotY="50%"  旋轉的圓心坐標

舉個慄子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <rotate xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:fromDegrees="0"
 4     android:toDegrees="180"
 5     android:visible="true"
 6     android:pivotX="50%"
 7     android:pivotY="50%"
 8     android:duration="2000"
 9     android:repeatCount="3"
10     android:repeatMode="reverse"
11     >
12 
13 </rotate>

 

(二):set 自定義動畫組合

  set 沒有自己的特有屬性,repeatCount屬性不能直接再set標簽下設置,設置無效,要設置在裡面的具體動畫中

舉個慄子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <set xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:duration="2000"
 4     android:repeatMode="reverse"
 5     android:fillAfter="true"
 6 
 7     >
 8 
 9     <alpha
10         android:fromAlpha="0.1"
11         android:toAlpha="1"
12         android:duration="5000"
13         android:repeatCount="5"
14         android:startOffset="1000"
15         />
16     <translate
17         android:fromXDelta="0"
18         android:toXDelta="10%"
19         android:fromYDelta="0"
20         android:toYDelta="0"
21         android:repeatCount="3"
22         android:repeatMode="reverse"/>
23 
24     <rotate
25         android:fromDegrees="0"
26         android:toDegrees="180"
27         android:visible="true"
28         android:pivotX="50%"
29         android:pivotY="50%"
30         android:duration="2000"
31         android:repeatCount="3"
32         android:repeatMode="reverse"/>
33     <scale
34         android:fromXScale="0.4"
35         android:toXScale="1.4"
36         android:fromYScale="0.4"
37         android:toYScale="1.4"
38         android:pivotX="50%"
39         android:pivotY="50%"
40         android:repeatCount="3"
41         android:repeatMode="reverse"
42         android:duration="3000"
43         android:fillAfter="true"/>
44 
45 </set>

屬性介紹完了我們來實現一下:

1.在android studio中創建 xml標簽文件

 

 

 

結果:

該文件也可以放在drawable目錄下

2.以set舉慄子:

  1. 準備xml標簽文件set.xml
  2. <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fillAfter="true">
    
        <alpha android:fromAlpha="1.0"
            android:toAlpha="0.1"/>
        <scale android:fromXScale="0"
            android:fromYScale="0"
            android:toYScale="1.4"
            android:toXScale="1.4"/>
        <translate android:fromYDelta="0"
            android:fromXDelta="0"
            android:toYDelta="0"
            android:toXDelta="50%"/>
        <rotate android:fromDegrees="0"
            android:toDegrees="90"
            />
    </set>
    

      

  3. 在佈局中放一個TextView
  4. <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.learning.animationapplication.MainActivity">
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:background="@android:color/holo_blue_bright"/>
    
    </android.support.constraint.ConstraintLayout>
    

      

  5. 在Activity中載入動畫

    

package com.learning.animationapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private Animation animation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        animation = AnimationUtils.loadAnimation(this, R.anim.set);//載入動畫
        tv.startAnimation(animation);//啟動動畫,並且是立即啟動
    }
}

  

 

代碼實現,不用xml標簽

舉例:

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 表結構為: 表數據為: 表中數據可以看到name列中有兩行數據是一致的,去重的SQL語句為: 去重後的數據為: 總結 在進行去重時,資料庫無法進行邊查詢邊刪除,所以刪除的時候必須是第三張臨時表作為匹配刪除,這樣的操作可以省略創建臨時表直接刪除原表中數據,推薦這種方式進行去重操作。 ...
  • 在視窗1開通一個名為 redis 的通道: 從視窗2傳入信息: 此時視窗1會收到這條信息: 以上, 就是通過 SUBSCRIBE 和 PUBLISH 實現了一個簡單的消息傳遞的過程. 目前我們是有一個視窗開通 redis 通道, 另一個視窗向這個通道傳遞消息, 大家可以試下再多開一個視窗, 也開通 ...
  • ordered set 是根據 score值有序排列的數據集合. 首先還是清空數據, 並清屏, 此步驟省略~~~~ 新建一條 ordered set 數據 myset1, 並存入4個字元串, score 的排列順序為1-4: 查看這個數據: 給 myset1 的值里新加一個字元e, score=10 ...
  • INSERT INTO table SELECT * FROM OPENDATASOURCE ('SQLOLEDB', 'Data Source=172.168.44.146;User ID=sa;password=123' ).tableexec sp_configure 'show advanc ...
  • unordered collection of unique strings.set值是唯一的字元串的無序集合, 把握住兩個特點: 唯一, 無序. 清空所有的數據, 並清理顯示界面: 保存一條 set 數據, 鍵是 myset1, 值是 1, 2, 3, 4 四個數字: 查看鍵myset1 的值: ...
  • select * from dba_jobs ;select * from dba_scheduler_job_run_details t; >這個語句通過制定job名,來查看job的運行的詳細信息 select * from dba_scheduler_jobs; >這個語句可以查看所有job,及 ...
  • 正如前面所講的, redis 的數據結構就是一系列的鍵值對鍵 -> printable ASCII (可列印的 ASCII 碼, 最大值是 512MB)值 -> Primitives (基本的) string 字元串 (最大值是 512MB) Containers (of string) (以其他形 ...
  • 屏幕尺寸 #define kScreenWidth [UIScreen mainScreen].bounds.size.width #define kScreenHeight [UIScreen mainScreen].bounds.size.height 手機型號 #define kISiPhon ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...