Android數字價格變化的動畫效果的簡單實現

原理:使用ValueAnimator屬性動畫類實現,它通過值的改變手動設置對象的屬性值來實現動畫效果。直接貼代碼:

public static void doNumberAnim(TextView tvPrice, float startNumber, float endNumber) {ValueAnimator animator = ValueAnimator.ofFloat(startNumber, endNumber);animator.setDuration(800);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {tvPrice.setText(animation.getAnimatedValue().toString());}});animator.start();
}

對于官網解釋如下:

This class provides a simple timing engine for running animations which calculate animated values and set them on target objects.

There is a single timing pulse that all animations use. It runs in a custom handler to ensure that property changes happen on the UI thread.

By default, ValueAnimator uses non-linear time interpolation, via the?AccelerateDecelerateInterpolator?class, which accelerates into and decelerates out of an animation. This behavior can be changed by calling?setInterpolator.

Animators can be created from either code or resource files. Here is an example of a ValueAnimator resource file:

ValueAnimator also supports the use of a combination of?PropertyValuesHolder?and?Keyframe?resource tags to create a multi-step animation. Note that you can specify explicit fractional values (from 0 to 1) for each keyframe to determine when, in the overall duration, the animation should arrive at that value. Alternatively, you can leave the fractions off and the keyframes will be equally distributed within the total duration:


此類提供了一個簡單的計時引擎,用于運行動畫,這些動畫計算動畫值并將其設置在目標對象上。

所有動畫都使用單個定時脈沖。它在自定義處理程序中運行,以確保屬性更改發生在 UI 線程上。

默認情況下,ValueAnimator 通過類使用非線性時間插值,該插值加速到動畫中,從動畫中減速。可以通過調用 來更改此行為。AccelerateDecelerateInterpolatorsetInterpolator

可以從代碼或資源文件創建動畫器。下面是 ValueAnimator 資源文件的示例:

ValueAnimator 還支持使用 and 資源標記的組合來創建多步驟動畫。請注意,您可以為每個關鍵幀指定顯式小數值(從 0 到 1),以確定動畫在整個持續時間內何時應達到該值。或者,您可以關閉分數,關鍵幀將在總持續時間內均勻分布:PropertyValuesHolderKeyframe

總結

常數

static?final int
INFINITE?= -1

此值與屬性一起使用以無限期地重復動畫。setRepeatCount

static?final int
RESTART?= 1

當動畫到達末尾并且為 INFINITE 或正值時,動畫將從開頭重新啟動。repeatCount

static?final int
REVERSE?= 2

當動畫到達末尾并且為無限值或正值時,動畫在每次迭代時都會反轉方向。repeatCount

公共構造函數

ValueAnimator()

創建一個新的 ValueAnimator 對象。

公共方法

static boolean
areAnimatorsEnabled()

返回系統范圍的動畫器當前是否已啟用。

void
cancel()

取消動畫。

@NonNull?ValueAnimator
clone()
void
end()

結束動畫。

float
getAnimatedFraction()

返回當前動畫分數,這是動畫上最近幀更新中使用的經過/插值分數。

@NonNull?Object
getAnimatedValue()

當只有一個屬性被動畫化時,由此計算的最新值。ValueAnimator

@Nullable?Object
getAnimatedValue(@NonNull?String?propertyName)

由此計算的最新值為 。ValueAnimatorpropertyName

long
getCurrentPlayTime()

獲取動畫在時間中的當前位置,該位置等于當前時間減去動畫開始的時間。

long
getDuration()

獲取動畫的長度。

static long
getFrameDelay()

動畫的每一幀之間的時間量(以毫秒為單位)。

@Nullable?Interpolator
getInterpolator()

返回此值動畫器使用的計時插值器。

@NonNull?String
getNameForTrace()

返回此動畫器的名稱以進行調試。

int
getRepeatCount()

定義動畫應重復的次數。

int
@ValueAnimator.RepeatMode
getRepeatMode()

定義此動畫到達末尾時應執行的操作。

long
getStartDelay()

調用延遲啟動動畫的時間量(以毫秒為單位)。start

long
getTotalDuration()

獲取動畫的總持續時間,包括動畫序列、開始延遲和重復。

@NonNull?PropertyValuesHolder[]
getValues()

返回此值動畫器在其間進行動畫處理的值。

boolean
isRunning()

返回此動畫器當前是否正在運行(已啟動并已超過任何初始啟動延遲周期且尚未結束)。

boolean
isStarted()

返回此動畫器是否已啟動和尚未結束。

static @NonNull?ValueAnimator
ofArgb(@NonNull?int[]?values)

構造并返回一個在顏色值之間進行動畫處理的 ValueAnimator。

static @NonNull?ValueAnimator
ofFloat(@NonNull?float[]?values)

構造并返回一個在浮點值之間進行動畫處理的 ValueAnimator。

static @NonNull?ValueAnimator
ofInt(@NonNull?int[]?values)

構造并返回一個在 int 值之間進行動畫處理的 ValueAnimator。

static @NonNull?ValueAnimator
ofObject(@NonNull?TypeEvaluator?evaluator,?@NonNull?Object[]?values)

構造并返回一個在對象值之間進行動畫處理的 ValueAnimator。

static @NonNull?ValueAnimator
ofPropertyValuesHolder(@NonNull?PropertyValuesHolder[]?values)

構造并返回一個 ValueAnimator,該動畫器在 PropertyValuesHolder 對象中指定的值之間進行動畫處理。

void
pause()

暫停正在運行的動畫。

void
resume()

恢復暫停的動畫,使動畫師在暫停時從中斷的位置繼續。

void
reverse()

反向播放 ValueAnimator。

void
setCurrentFraction(float?fraction)

將動畫的位置設置為指定的分數。

void
setCurrentPlayTime(long?playTime)

將動畫的位置設置為指定的時間點。

@NonNull?ValueAnimator
setDuration(long?duration)

設置動畫的長度。

void
setEvaluator(@NonNull?TypeEvaluator?value)

計算此動畫的動畫值時要使用的類型賦值器。

void
setFloatValues(@NonNull?float[]?values)

設置將在浮點值之間進行動畫處理。

static void
setFrameDelay(long?frameDelay)

動畫的每一幀之間的時間量(以毫秒為單位)。

void
setIntValues(@NonNull?int[]?values)

設置將在兩者之間進行動畫處理的 int 值。

void
setInterpolator(@Nullable?Interpolator?value)

用于計算此動畫的經過分數的插值器。

void
setNameForTrace(@NonNull?String?animationName)

設置要在系統跟蹤中顯示的動畫的名稱。

void
setObjectValues(@NonNull?Object[]?values)

設置要對此動畫進行動畫處理的值。

void
setRepeatCount(int?value)

設置動畫應重復的次數。

void
setRepeatMode(@ValueAnimator.RepeatMode?int?value)

定義此動畫到達末尾時應執行的操作。

void
setStartDelay(long?startDelay)

調用延遲啟動動畫的時間量(以毫秒為單位)。start

void
setValues(@NonNull?PropertyValuesHolder[]?values)

設置每個屬性之間的值。

void
start()

啟動此動畫。

@NonNull?String
toString()

繼承的常量

來自androidx.core.animation.Animator

繼承的方法

來自androidx.core.animation.Animator

公共方法

getAnimatedValue

public @Nullable Object getAnimatedValue(@NonNull String propertyName)

由此計算的最新值為 。此只讀屬性的主要用途是在計算值后立即從調用 期間檢索值,該值在每個動畫幀期間調用。ValueAnimatorpropertyNameValueAnimatoronAnimationUpdate

返回
@Nullable?Object

animatedValue 最近由 .ValueAnimator

getDuration

獲取動畫的長度。默認持續時間為 300 毫秒。

返回
long

動畫的長度(以毫秒為單位)。

對象

public static @NonNull ValueAnimator ofObject(@NonNull TypeEvaluator evaluator, @NonNull Object[] values)

構造并返回一個在對象值之間進行動畫處理的 ValueAnimator。單個值意味著該值是要動畫到的值。但是,這在 ValueAnimator 對象中通常沒有用處,因為對象無法確定動畫的起始值(與 ObjectAnimator 不同,ObjectAnimator 可以從要設置動畫的目標對象和屬性派生該值)。因此,通常應有兩個或多個值。

注意:Object 值存儲為對原始對象的引用,這意味著調用此方法后對這些對象的更改將影響動畫器上的值。如果在調用此方法后對象將在外部發生突變,則調用方應改為傳遞這些對象的副本。

由于 ValueAnimator 不知道如何在任意對象之間進行動畫處理,因此此工廠方法還采用 TypeEvaluator 對象,ValueAnimator 將使用該對象來執行該插值。

參數
@NonNull?TypeEvaluator?evaluator

將在每個動畫幀上調用的類型計算器,以在對象值之間提供必要的插值以派生動畫值。

@NonNull?Object[]?values

動畫將隨時間推移在其之間設置動畫效果的一組值。

返回
@NonNull?ValueAnimator

一個 ValueAnimator 對象,該對象設置為在給定值之間進行動畫處理。

設置電流分數

public void setCurrentFraction(float fraction)

將動畫的位置設置為指定的分數。此分數應介于 0 和動畫的總分數之間,包括任何重復。也就是說,分數 0 會將動畫定位在重復一次的反轉動畫器的開頭,值 1 定位在末尾,值 2 定位在末尾。如果動畫尚未啟動,則在設置為此分數后,它將不會向前前進;它只需將分數設置為此值,并根據該分數執行任何適當的操作。如果動畫已經在運行,則 setCurrentFraction() 會將當前分數設置為此值,并從該點繼續播放。 由于更改分數,不會調用事件;這些事件僅在動畫運行時處理。androidx.core.animation.Animator.AnimatorListener

參數
float?fraction

動畫前進或倒帶到的分數。動畫師的最大分數范圍之外的值將被鉗制到正確的范圍。

setEvaluator

public void setEvaluator(@NonNull TypeEvaluator value)

計算此動畫的動畫值時要使用的類型賦值器。系統將根據構造函數中的類型和自動分配浮點數或整數賦值器。但是,如果這些值不是這些基元類型之一,或者需要不同的計算(例如表示顏色的 int 值所必需的),則需要分配自定義計算器。例如,在對顏色值運行動畫時,應使用 來獲取正確的 RGB 顏色插值。startValueendValueArgbEvaluator

如果此值動畫器之間只有一組值進行動畫處理,則此賦值器將用于該集。如果有幾組值正在進行動畫處理,例如在 ValueAnimator 上設置了 PropertyValuesHolder 對象,則賦值器僅分配給第一個 PropertyValuesHolder 對象。

參數
@NonNull?TypeEvaluator?value

此動畫要使用的賦值器

設置對象值

public void setObjectValues(@NonNull Object[] values)

設置要對此動畫進行動畫處理的值。單個值意味著該值是要動畫到的值。但是,這在 ValueAnimator 對象中通常沒有用處,因為對象無法確定動畫的起始值(與 ObjectAnimator 不同,ObjectAnimator 可以從要設置動畫的目標對象和屬性派生該值)。因此,通常應有兩個或多個值。

注意:Object 值存儲為對原始對象的引用,這意味著調用此方法后對這些對象的更改將影響動畫器上的值。如果在調用此方法后對象將在外部發生突變,則調用方應改為傳遞這些對象的副本。

如果已經通過多個 PropertyValuesHolder 對象為此 ValueAnimator 定義了多組值,則此方法將為其中第一個對象設置值。

在 ValueAnimator 上應該設置一個 TypeEvaluator,它知道如何在這些值對象之間進行插值。ValueAnimator 只知道如何在其他 setValues() 方法中指定的基元類型之間進行插值。

參數
@NonNull?Object[]?values

要在其間進行動畫處理的值集。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/37373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37373.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言中的 RSA加密和解密算法: 深度探索與實現

C語言中的 RSA加密和解密算法: 深度探索與實現 RSA加密算法是一種非對稱加密算法,即公開密鑰加密,私有密鑰解密。在公開密鑰加密和私有密鑰解密的過程中,密鑰是不同的,這是與其他加密算法的主要區別。RSA算法的安全性依賴于大數分…

ssm+mybatis無法給帶有下劃線屬性賦值問題

原因:mybaitis根據配置,將有下劃線的字段名改為了駝峰格式。 具體見:ssmmybatis無法給帶有下劃線屬性賦值問題,無法獲取數據庫帶下劃線的字段值 - 開發者博客 解決方式: 直接將實體類中的下劃線去掉返回值使用resul…

歸并排序 與 計數排序

目錄 1.歸并排序 1.1 遞歸實現歸并排序: 1.2 非遞歸實現歸并排序 1.3 歸并排序的特性總結: 1.4 外部排序 2.計數排序 2.1 操作步驟: 2.2 計數排序的特性總結: 3. 7種常見比較排序比較 1.歸并排序 基本思想: 歸并排序(MERGE-SORT)是建立在歸并操作上的一種…

代理技術在網絡安全、爬蟲和數據隱私中的多重應用

1. Socks5代理:靈活的數據中轉 Socks5代理協議在網絡通信中起著關鍵作用。與其他代理技術不同,Socks5代理不僅支持TCP連接,還能夠處理UDP流量,使其在需要實時數據傳輸的場景中表現尤為出色。通過將請求和響應中轉到代理服務器&am…

redis分布式集群-redis+keepalived+ haproxy

redis分布式集群架構(RedisKeepalivedHaproxy)至少需要3臺服務器、6個節點,一臺服務器2個節點。 redis分布式集群架構中的每臺服務器都使用六個端口來實現多路復用,最終實現主從熱備、負載均衡、秒級切換的目標。 redis分布式集…

使用Edge和chrom擴展工具(GoFullPage)實現整頁面截圖或生成PDF文件

插件GoFullPage下載:點擊免費下載 如果在瀏覽網頁時,有需要整個頁面截圖或導出PDF文件的需求,這里分享一個Edge瀏覽器的擴展插件:GoFullPage。 這個工具可以一鍵實現頁面從上到下滾動并截取。 一、打開“管理擴展”(…

網絡設備(防火墻、路由器、交換機)日志分析監控

外圍網絡設備(如防火墻、路由器、交換機等)是關鍵組件,因為它們控制進出公司網絡的流量。因此,監視這些設備的活動有助于 IT 管理員解決操作問題,并保護網絡免受攻擊者的攻擊。通過收集和分析這些設備的日志來監控這些…

Python 3 使用Hadoop 3之MapReduce總結

MapReduce 運行原理 MapReduce簡介 MapReduce是一種分布式計算模型,由Google提出,主要用于搜索領域,解決海量數據的計算問題。 MapReduce分成兩個部分:Map(映射)和Reduce(歸納)。…

tauri-react:快速開發跨平臺軟件的架子,支持自定義頭部和窗口陰影效果

tauri-react 一個使用 taurireacttsantd 開發跨平臺軟件的模板,支持窗口頭部自定義和窗口陰影,不用再自己做適配了,拿來即用,非常 nice。 開原地址:GitHub - Sjj1024/tauri-react: 一個最基礎的使用tauri和react開發…

生成式 AI 在泛娛樂行業的應用場景實踐 – 助力風格化視頻內容創作

感謝大家閱讀《生成式 AI 行業解決方案指南》系列博客,全系列分為 4 篇,將為大家系統地介紹生成式 AI 解決方案指南及其在電商、游戲、泛娛樂行業中的典型場景及應用實踐。目錄如下: 《生成式 AI 行業解決方案指南與部署指南》《生成式 AI 在…

一個概率論例題引發的思考

浙江大學版《概率論與數理統計》一書,第13章第1節例2: 這個解釋和模型比較簡單易懂。 接下來,第13章第2節的例2也跟此模型相關: 在我自己的理解中,此題的解法跟上一個題目一樣,其概率如下面的二維矩陣&a…

聊聊計算機技術

目錄 1.計算機的概念 2.計算機的發展過程 3.計算機的作用 4.計算機給人類帶來的福利 1.計算機的概念 計算機是一種用于處理和存儲數據的電子設備。它能夠執行各種操作,比如計算、邏輯操作、數據存儲和檢索等。計算機由硬件和軟件兩部分組成。 計算機的硬件包括中…

Go 語言并發編程 及 進階與依賴管理

1.0 從并發編程本質了解Go高性能的本質 1.1 Goroutine 協程可以理解為輕量級線程; Go更適合高并發場景原因之一:Go語言一次可以創建上萬協成; “快速”:開多個協成 打印。 go func(): 在函數前加 go 代表 創建協程; time.Sleep():…

基于深度信念網絡的西儲大學軸承故障分類識別,基于EMD+DBN的西儲大學軸承故障識別,LCD+DBN,LMD+DBN

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) (EMD,LCD,LMD)+DBN的深度信念網絡的西儲大學軸承故障分類識別 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類…

Nacos使用SpringCloudAlibaba+Dubbo實現

Nacos簡介 Nacos是阿里的一個開源產品,它是針對微服務架構中的服務發現、服務治理、配置管理的綜合型解決方案。 官方介紹是這樣的: Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、…

CSDN編程題-每日一練(2023-08-14)

CSDN編程題-每日一練(2023-08-14) 一、題目名稱:小股炒股二、題目名稱:王子闖閘門三、題目名稱:圓小藝 一、題目名稱:小股炒股 時間限制:1000ms內存限制:256M 題目描述: …

Linux學習之防火墻概述

防火墻分類: 軟件防火墻:常用于數據包的過濾,比如限制某些ip或者端口,進行某些數據的轉發或者傳送 硬件防火墻:防御地域攻擊 軟件防火墻的分類: 包過濾防火墻:控制比較寬泛,防御效果…

ISIS技術(第三十七課)

1 分享一下華為官網上的一張地圖 官網地址:https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705 2 路由的分類 -直連路由 直接連接的路由,且配置了IP地址之后(在同一網段內),就是直連路由。 -非直連路由 -靜態路由…

Shell命令之eval命令

1、基本作用 二次執行命令 2、基本格式 eval command-line3、例如 以下命令無法執行 pipe"|" ls $pipe wc -l ls: -l: No such file or directory ls: wc: No such file or directory ls: |: No such file or directory以下命令可以執行 eval ls $pipe wc -lSh…

Apache Dubbo概述

一、課程目標 1. 【了解】軟件架構的演進過程 2. 【理解】什么是RPC 3. 【掌握】Dubbo架構 4. 【理解】注冊中心Zookeeper 5. 【掌握】Zookeeper的安裝和使用 6. 【掌握】Dubbo入門程序 7. 【掌握】Dubbo管理控制臺的安裝和使用 8. 【理解】Dubbo配置二、分布式RPC框架Apache …