自定義控件之動畫篇(六)——聯合動畫的代碼及xml實現

在Android中,聯合動畫(即組合多種類型的動畫)可以通過編寫Java/Kotlin代碼或XML資源文件來實現。這里我們將分別展示如何通過這兩種方式來實現一個簡單的自定義控件動畫,該動畫將包含平移和縮放效果。

1. XML 資源文件實現

首先,你需要在你的項目中創建一個新的XML動畫資源文件,通常位于 res/anim 目錄下。如果目錄不存在,你需要手動創建。

創建 XML 動畫資源文件

 

Xml

1<!-- res/anim/custom_animation.xml -->
2<set xmlns:android="http://schemas.android.com/apk/res/android"
3    android:fillAfter="true">
4
5    <translate
6        android:fromXDelta="0%"
7        android:toXDelta="50%"
8        android:fromYDelta="0%"
9        android:toYDelta="50%"
10        android:duration="1000"/>
11
12    <scale
13        android:fromXScale="1.0"
14        android:toXScale="1.5"
15        android:fromYScale="1.0"
16        android:toYScale="1.5"
17        android:pivotX="50%"
18        android:pivotY="50%"
19        android:startOffset="1000"
20        android:duration="1000"/>
21</set>

在這個例子中,我們定義了一個 <set> 動畫,它包含了一個平移動畫(<translate>)和一個縮放動畫(<scale>)。平移動畫持續1秒,緊接著是縮放動畫,后者在平移動畫結束后開始,也持續1秒。

在代碼中引用動畫

在你的Activity或Fragment中,你可以這樣引用并播放這個動畫:

 

Java

1// Java
2Button myButton = findViewById(R.id.my_button);
3Animation animation = AnimationUtils.loadAnimation(this, R.anim.custom_animation);
4myButton.startAnimation(animation);

或者使用Kotlin:

 

Kotlin

1// Kotlin
2val myButton: Button = findViewById(R.id.my_button)
3val animation: Animation = AnimationUtils.loadAnimation(this, R.anim.custom_animation)
4myButton.startAnimation(animation)

2. Java/Kotlin 代碼實現

你也可以直接在代碼中使用 AnimatorSet 來組合多個 Animator 對象,從而實現更精細的控制。

創建動畫代碼

 

Java

1// Java
2Button myButton = findViewById(R.id.my_button);
3
4// 創建平移動畫
5ObjectAnimator translateX = ObjectAnimator.ofFloat(myButton, View.TRANSLATION_X, 0, 50);
6ObjectAnimator translateY = ObjectAnimator.ofFloat(myButton, View.TRANSLATION_Y, 0, 50);
7AnimatorSet translateSet = new AnimatorSet();
8translateSet.playTogether(translateX, translateY);
9translateSet.setDuration(1000);
10
11// 創建縮放動畫
12ObjectAnimator scaleX = ObjectAnimator.ofFloat(myButton, View.SCALE_X, 1.0f, 1.5f);
13ObjectAnimator scaleY = ObjectAnimator.ofFloat(myButton, View.SCALE_Y, 1.0f, 1.5f);
14AnimatorSet scaleSet = new AnimatorSet();
15scaleSet.playTogether(scaleX, scaleY);
16scaleSet.setDuration(1000);
17scaleSet.setStartDelay(1000); // 在平移動畫后開始
18
19// 創建組合動畫
20AnimatorSet combinedAnimation = new AnimatorSet();
21combinedAnimation.playSequentially(translateSet, scaleSet);
22combinedAnimation.start();

或者使用Kotlin:

 

Kotlin

1// Kotlin
2val myButton: Button = findViewById(R.id.my_button)
3
4// 創建平移動畫
5val translateX = ObjectAnimator.ofFloat(myButton, View.TRANSLATION_X, 0f, 50f)
6val translateY = ObjectAnimator.ofFloat(myButton, View.TRANSLATION_Y, 0f, 50f)
7val translateSet = AnimatorSet().apply {
8    playTogether(translateX, translateY)
9    duration = 1000
10}
11
12// 創建縮放動畫
13val scaleX = ObjectAnimator.ofFloat(myButton, View.SCALE_X, 1.0f, 1.5f)
14val scaleY = ObjectAnimator.ofFloat(myButton, View.SCALE_Y, 1.0f, 1.5f)
15val scaleSet = AnimatorSet().apply {
16    playTogether(scaleX, scaleY)
17    duration = 1000
18    startDelay = 1000 // 在平移動畫后開始
19}
20
21// 創建組合動畫
22val combinedAnimation = AnimatorSet().apply {
23    playSequentially(translateSet, scaleSet)
24}
25combinedAnimation.start()

通過以上兩種方法,你可以輕松地在Android中實現聯合動畫,無論是使用XML還是代碼,都可以根據具體需求靈活選擇。

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

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

相關文章

AI學習指南機器學習篇-梯度提升樹模型應用與Python實踐

AI學習指南機器學習篇-梯度提升樹模型應用與Python實踐 機器學習領域中的梯度提升樹&#xff08;Gradient Boosting Tree&#xff09;模型是一種非常強大且廣泛應用的模型&#xff0c;它在各種數據類型和問題類型上都表現出色。在本篇博客中&#xff0c;我們將介紹如何使用Pyt…

開關電源中強制連續FCCM模式與輕載高效PSM,PFM模式優缺點對比筆記

文章目錄 前言一、連續FCCM模式優點&#xff1a;缺點&#xff1a; 二,輕載高效PSM&#xff0c;PFM優點&#xff1a;缺點: 總結 前言 今天我們來學習下開關電源中&#xff0c;強制連續FCCM模式與輕載高效PSM&#xff0c;PFM模式優缺點對比 一、連續FCCM模式 優點&#xff1a; …

mac中如何恢復因為破解腳本導致的IDEA無法啟動的問題

問題 為了在mac中安裝免費的2024版idea&#xff0c;導致下載了一個腳本&#xff0c;使用這個腳本后&#xff0c;但是發現idea還沒有破解&#xff0c;相反導致idea無法啟動&#xff0c;每次點擊&#xff0c;都會彈出“cannot start IDE…” 問題排查 在訪達中點擊mac的應用程…

docker -run hello-world超時

主要原因就是嘗試拉取庫的時候沒有從阿里云鏡像里拉&#xff0c;所以設置一下就好了 這里使用的是ubuntu系統&#xff08;命令行下逐行敲就行了&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&quo…

什么是生成式人工智能

什么是生成式人工智能 生成式人工智能生成式人工智能的特點生成式人工智能的工作原理生成式人工智能的類型生成式人工智能面臨的挑戰數據要求訓練復雜性控制輸出道德問題監管障礙 生成式人工智能 生成式人工智能是指旨在生成書面文本、音頻、圖像或視頻形式的新內容的人工智能…

Adobe Acrobat添加時間戳服務器

文章目錄 前言一、Adobe Acrobat添加時間戳服務器1.打開Adobe Acrobat軟件2.點擊【菜單】→ 【首選項】3.點擊【安全性】→【更多】4.點擊【新建】5.輸入【名稱】→【服務器URL】 前言 一、Adobe Acrobat添加時間戳服務器 1.打開Adobe Acrobat軟件 2.點擊【菜單】→ 【首選項…

模擬退火算法1——簡介

模擬退火算法來源于固體退火原理&#xff0c;將固體加溫至充分高&#xff0c;再讓其徐徐冷卻&#xff0c;加溫時&#xff0c;固體內部粒子隨溫升變為無序狀&#xff0c;內能增大&#xff0c;而徐徐冷卻時粒子漸趨有序&#xff0c;在每個溫度都達到平衡態&#xff0c;最后在常溫…

[C++][設計模式][訪問器]詳細講解

目錄 1.動機2.模式定義3.要點總結4.代碼感受1.代碼一2.代碼二 1.動機 在軟件構件過程中&#xff0c;由于需求的變化&#xff0c;某些類層次結構中常常需要增加新的行為(方法)&#xff0c;如果直接在基類中做這樣的更改&#xff0c; 將會給子類帶來很繁重的變更負擔&#xff0c…

加密基本知識:密鑰、簽名、證書

一、密碼(clpher) 是一種用于加密或者解密的算法 密碼學中的密碼&#xff08;cipher&#xff09;和我們日常生活中所說的密碼不太一樣&#xff0c;計算機術語『密碼 cipher』是一種用于加密或者解密的算法&#xff0c;而我們日常所使用的『密碼 password』是一種口令&#xff…

數據恢復篇:5 款最佳 Mac 數據恢復軟件

說到保護我們的數字生活&#xff0c;數據恢復軟件的重要性怎么強調都不為過。無論您是意外刪除了假期照片的普通用戶&#xff0c;還是面臨硬盤損壞的專業人士&#xff0c;隨之而來的恐慌都是普遍存在的。幸運的是&#xff0c;數據恢復工具可以緩解這些壓力。在Mac用戶可用的眾多…

搜維爾科技:使用Manus VR手套和ART光學追蹤功能實現虛擬場景工業仿真操作

&#xff1a;使用Manus VR手套和ART光學追蹤功能實現虛擬場景工業仿真操作 搜維爾科技&#xff1a;使用Manus VR手套和ART光學追蹤功能實現虛擬場景工業仿真操作

Android C++系列:JNI中的線程操作

Java中創建線程三種方式: 繼承Thread類創建線程類;通過Runnable接口創建線程類;通過Callable和Future創建線程。Native 中支持的線程標準是 POSIX 線程,它定義了一套創建和操作線程的 API 。 我們可以在 Native 代碼中使用 POSIX 線程,就相當于使用一個庫一樣,首先需要包…

android中獲取視頻的預覽圖

1.將視頻導入raw文件中&#xff08;轉為bitmap圖像&#xff09; MediaMetadataRetriever 類主要用于從本地文件或者網絡上的文件獲取元數據信息&#xff0c;例如視頻的幀圖像、持續時間等&#xff0c;并不支持直接從網絡地址獲取視頻幀 MediaMetadataRetriever retriever new…

zabbix小白入門:從SNMP配置到圖形展示——以IBM服務器為例

作者 樂維社區&#xff08;forum.lwops.cn&#xff09;許遠 在運維實踐中&#xff0c;Zabbix作為一款強大的開源監控工具&#xff0c;被廣泛應用于服務器、網絡設備和應用程序的監控&#xff0c;成為保障業務連續性和高效運行的關鍵。然而&#xff0c;對于Zabbix的初學者來說&a…

FactoryBean 原理簡介

FactoryBean 首先是一個工廠類&#xff0c;它可以生產指定的Bean&#xff0c;特殊之處在于它可以向Spring容器中注冊兩個Bean&#xff0c;一個是它本身&#xff0c;一個是FactoryBean.getObject()方法返回值所代表的Bean。通過實現 FactoryBean 接口&#xff0c;你可以控制某個…

線程和進程的區別及應用場景

線程和進程的區別及應用場景 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討計算機中兩個重要的概念&#xff1a;線程和進程。這兩者在操作系…

人工智能--循環神經網絡

個人主頁&#xff1a;歡迎來到 Papicatch的博客 課設專欄 &#xff1a;學生成績管理系統 專業知識專欄&#xff1a; 專業知識 文章目錄 &#x1f349;引言 &#x1f349;概述 &#x1f348;基本概念 &#x1f34d;定義 &#x1f34d;結構 &#x1f34c;輸入層 &#…

行業模板|DataEase旅游行業大屏模板推薦

DataEase開源數據可視化分析工具于2022年6月發布模板市場&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增適用于DataEase v2版本的模板分類。模板市場旨在為DataEase用戶提供專業、美觀、拿來即用的大屏模板&#xff0c;方便用戶根據…

探索編程世界的奇妙之旅

在這個數字化時代&#xff0c;編程&#xff0c;這一曾經看似高深莫測的技能&#xff0c;正逐漸滲透到我們生活的方方面面。從智能手機上的應用程序&#xff0c;到自動駕駛的汽車&#xff0c;再到支撐互聯網運行的龐大服務器集群&#xff0c;背后都離不開編程的力量。今天&#…

【CSharp】使用enum枚舉編程的優點

【CSharp】使用enum枚舉編程的優點 1.背景2.代碼1.背景 在程序開發中為什么會使用enum枚舉呢,其實不使用enum代碼也能跑, 但是隨著業務越來越復雜,年代久遠,那也許就只能你能跑。 所謂面向bug編程,來獲得不可取代地位的思維邏輯,在AI時代洪流面前,從一開始就將錯付。 …