1. 程式人生 > >屬性動畫步驟總結——包含xml實現與java程式碼實現

屬性動畫步驟總結——包含xml實現與java程式碼實現

package com.oldeleven.day18_propertyanimatorfirst;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.os.Bundle
; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; /** * 第一步:在activity_main.xml檔案中線性佈局,其中包含兩個水平的LinearLayout和一個imageView空間 * 其中,連個水平的線性佈局中各包含5個按鈕,用於實現 透明(alpha) 旋轉(rotation) 縮放(scale) * 平移(translation) 集合(set)功能 * 第一行按鈕:使用Xml資原始檔的方式實現 * 第二行按鈕:使用java程式碼的方式實現功能 * * 方法一:屬性動畫————使用Xml資源方式實現 * propertyName: * alpha.xml -- alpha rotate.xml -- rotation scale.xml -- scaleX scaleY * translate.xml -- translationX translationY * xml檔案格式: * alpha.xml -- <objectAnimator 寫屬性/> * rotate.xml -- <objectAnimator 寫屬性/> * scale.xml --<set> <objectAnimator scaleX/> <objectAnimator scaleY/></set> * * java程式碼: * 對於 alpha.xml rotate.xml * ObjectAnimator animator_XXX_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.XXX); * 對於 scale.xml translate.xml * AnimatorSet animator_XXX_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext, R.animator.XXX); *啟動動畫 * animator_XXX_xml.start(); * * 方法二、使用java程式碼實現相同的功能 *對於 alpha,rotate,scale,translate.xml * 都是: ObjectAnimator animator = ObjectAnimator.ofFloat(); * animator.setXXX(); * animator.start(); * 對於set來說 * 第一步: AnimatorSet animatorSet = new AnimatorSet(); * 第二步:ObjectAnimator animator = ObjectAnimator.ofFloat(); * animator.setXXX(); * 第三步:建立List集合 list<Animator> list = new ArrayList<>(); * list.add(animator); * .... * 第四部:設定動畫的執行順序Sequentially--按順序的,Together---同步執行 * animatorSet.playSequentially(list); * 或者animatorSet.playTogether(list); * 第五步:啟動動畫 * animatorSet.start(); * * * */
public class MainActivity extends AppCompatActivity { private Context mContext = this; private ImageView imageView_main_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView();
} private void initView() { imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show); } public void clickView(View view) { switch (view.getId()) { //使用資原始檔寫屬性動畫 case R.id.button_alpha_xml: ObjectAnimator animator_alpha_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.alpha); animator_alpha_xml.setTarget(imageView_main_show); animator_alpha_xml.start(); break; case R.id.button_rotate_xml: ObjectAnimator animator_rotate_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext,R.animator.rotate); animator_rotate_xml.setTarget(imageView_main_show); animator_rotate_xml.start(); break; case R.id.button_scale_xml: AnimatorSet animator_scale_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.scale); animator_scale_xml.setTarget(imageView_main_show); animator_scale_xml.start(); break; case R.id.button_translate_xml: AnimatorSet animtor_translate_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.translate); animtor_translate_xml.setTarget(imageView_main_show); animtor_translate_xml.start(); break; case R.id.button_set_xml: AnimatorSet animator_set_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.set_animator); animator_set_xml.setTarget(imageView_main_show); animator_set_xml.start(); break; //java程式碼寫屬性動畫 case R.id.button_alpha: ObjectAnimator animator_alpha = ObjectAnimator.ofFloat(imageView_main_show, "alpha", 1.0f, 0.0f); animator_alpha.setRepeatMode(ValueAnimator.REVERSE); animator_alpha.setRepeatCount(ValueAnimator.INFINITE); animator_alpha.setDuration(3000); animator_alpha.start(); break; case R.id.button_rotate: ObjectAnimator animator_rotate = ObjectAnimator.ofFloat(imageView_main_show,"rotation",0,360); animator_rotate.setDuration(3000); animator_rotate.setRepeatCount(ValueAnimator.INFINITE); animator_rotate.setRepeatMode(ValueAnimator.REVERSE); animator_rotate.start(); break; case R.id.button_scale: ObjectAnimator animator_scaleX = ObjectAnimator.ofFloat(imageView_main_show,"scaleX",0,2.0f); animator_scaleX.setDuration(3000); animator_scaleX.setRepeatCount(ValueAnimator.INFINITE); animator_scaleX.setRepeatMode(ValueAnimator.REVERSE); animator_scaleX.start(); ObjectAnimator animator_scaleY = ObjectAnimator.ofFloat(imageView_main_show,"scaleY",0,2.0f); animator_scaleY.setDuration(4000); animator_scaleY.setRepeatCount(ValueAnimator.INFINITE); animator_scaleY.setRepeatMode(ValueAnimator.REVERSE); animator_scaleY.start(); break; case R.id.button_translate: ObjectAnimator animator_translateX = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,-100); ObjectAnimator animator_translateY = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300); animator_translateX.setDuration(2000); animator_translateX.setRepeatCount(ValueAnimator.INFINITE); animator_translateX.setRepeatMode(ValueAnimator.REVERSE); animator_translateX.start(); animator_translateY.setDuration(2000); animator_translateY.setRepeatCount(ValueAnimator.INFINITE); animator_translateY.setRepeatMode(ValueAnimator.REVERSE); animator_translateY.start(); break; case R.id.button_set: AnimatorSet animatorSet = new AnimatorSet(); ObjectAnimator animator_translateX1 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,100); ObjectAnimator animator_translateY1 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300); ObjectAnimator animator_translateX2 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",100,0); ObjectAnimator animator_translateY2 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",300,0); List<Animator> list = new ArrayList<>(); list.add(animator_translateX1); list.add(animator_translateY1); list.add(animator_translateX2); list.add(animator_translateY2); // animatorSet.playSequentially(list); animatorSet.playTogether(list); animatorSet.start(); break; } } }

用XML程式碼實現的動畫如下:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"

                android:duration="3000"
                android:propertyName="alpha"
                android:repeatCount="infinite"
                android:repeatMode="reverse"
                android:valueFrom="1.0f"
                android:valueTo="0.0"
                android:valueType="floatType"
    >

</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:duration="3000"
                android:propertyName="rotation"
                android:repeatCount="infinite"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="360"
                android:valueType="floatType">

</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">

    <objectAnimator
        android:duration="3000"
        android:propertyName="scaleX"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="2.0"
        android:valueType="floatType"/>

    <objectAnimator
        android:duration="3000"
        android:propertyName="scaleY"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="2.0"
        android:valueType="floatType"/>

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="200"
        android:valueType="floatType"/>

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="100"
        android:valueType="floatType"/>

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially" >

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:valueFrom="0"
        android:valueTo="200"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:valueTo="200"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:valueTo="0"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:valueTo="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:valueType="floatType" />

</set>

相關推薦

屬性動畫步驟總結——包含xml實現java程式碼實現

package com.oldeleven.day18_propertyanimatorfirst; import android.animation.Animator; import android.animation.AnimatorInflater; i

常用的八種排序演算法Java程式碼實現

1.直接插入排序 經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。 將第一個數和第二個數排序,然後構成一個有序序列 將第三個數插入進去,構成一個新的有序序列。 對第四個數、第五個數……直到最後一個數,重複第二步。

選擇排序原理分析java程式碼實現

1、選擇排序改進了氣泡排序,將必要的交換次數從 O(N^2 )減少到 O(N)次(理解選擇排序可以先看一下我的上一篇氣泡排序的部落格)不幸的是比較次數仍然保持為 O(N^2 )。然而,選擇排序仍然為大記錄量的排序提出了一個非常重要的改進,因為這些大量的記錄需要在記憶體中移動,

【演算法】字串反轉的多種實現java程式碼實現

原本還想再寫一個不使用額外記憶體的,發現貌似java實現不了, 如果哪位大神能實現歡迎補充 package com.billkang.algorithm; /** * 字串反轉 * * @au

Android屬性動畫用法總結

Android 3.0提供了屬性動畫,幾乎可以代替補間動畫。屬性動畫用法更加簡潔,功能更多強大。使用屬性動畫的兩個類是ValueAnimator和ObjectAnimator。 ValueAnaimator使用示例 ValueAnimator valueAn

xml檔案中載入Animator屬性動畫的三種xml標籤

<set android:ordering="sequentially" > <set> <objectAnimator android:duration="500" android:propertyN

生產者消費者 程式碼實現 java

        首先,我利用忙測試寫出了第一次版本的程式碼       1 package How; 2 //自寫程式碼 缺陷 無法完全實現pv操作執行緒處於忙測試狀態 3 public class bin_1_1 4 { 5

十大經典排序演算法詳細總結(含JAVA程式碼實現)

文章目錄 十大經典排序演算法詳細總結(含JAVA程式碼實現) 0、排序演算法說明 1、氣泡排序(Bubble Sort) 2、選擇排序(Selection Sort) 3、插入排序(Insertion Sort) 4、希爾

十大排序演算法的實現 十大經典排序演算法最強總結(含JAVA程式碼實現

十大經典排序演算法最強總結(含JAVA程式碼實現)   最近幾天在研究排序演算法,看了很多部落格,發現網上有的文章中對排序演算法解釋的並不是很透徹,而且有很多程式碼都是錯誤的,例如有的文章中在“桶排序”演算法中對每個桶進行排序直接使用了Collection.sort

Mysql:Java程式碼實現資料庫定時備份還原詳解

一、目的 使用java程式碼實現定時執行Mysql備份與還原。 二、思路 先寫好一個定時器,每隔多少時間執行一次備份 備份方法為,通過java向命令列寫入命令執行 首先在cmd中模擬備份,測試成功後 使用java程式碼實現資料備份功能

買什麼資料結構演算法,這裡有:動態圖解十大經典排序演算法(含JAVA程式碼實現

上篇的動圖資料結構反響不錯,這次來個動圖排序演算法大全。資料結構與演算法,齊了。 幾張動態圖捋清Java常用資料結構及其設計原理 本文將採取動態圖+文字描述+正確的java程式碼實現來講解以下十大排序演算法: 氣泡排序 選擇排序 插入排序 希爾排序

【資料結構演算法】回溯法解決N皇后問題,java程式碼實現

N皇后問題 問題描述 在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法,這稱為八皇后問題。 延伸一下,便為N皇后問題。 核心思想 解決N皇后問題有兩個關鍵點。一是如何進行放置棋子,二是如何驗證棋子是否符合

【資料結構演算法】貪心演算法解決揹包問題。java程式碼實現

揹包問題(貪心演算法) 貪心演算法思想 簡單的說,就是將大問題轉化為最優子問題,例如本題所要求的,揹包容量有限,要想使物品的總價值最高,那麼,我們必須儘可能的選擇權重高的(即單位價值更高)的物品進行裝載。 在揹包問題中,物品是可拆的,即可以分成任意部分進行裝載,而最終實現的目標是

排序演算法總結(含動圖演示和Java程式碼實現)

本文將圍繞氣泡排序、桶排序、計數排序、堆排序、插入排序、並歸排序、快速排序和選擇排序,按照描述、時間複雜度(最壞情況)、動態圖展示和程式碼實現來講解。本文預設排序為從小到大。 本文相關程式碼已上傳至github,歡迎關注https://github.com/zhuzhenke/commo

JS使用WebSocket實現Java圖形介面(swing)進行通訊

背景:做專案的時候有過這樣的一個需求,在訪問某個網頁的時候進行登入,需要瀏覽器獲取電腦的硬體資源,但是通過瀏覽器直接讀取的方式有些不便,所以想到使用Java開發一個圖形應用介面的程式讀取電腦程式通過socket通訊傳輸給html頁面用於驗證。 寫在前面:在Java伺服器這端

jdk動態代理cglib程式碼實現--SpringAop底層原理

動態代理分為兩類:基於介面的代理和基於繼承的代理 兩類實現的代表是:JDK代理 與 CGlib代理 cglib實現動態代理: 1、定義目標物件: public class RealSubject { //目標物件RealSubject,cglib不

【資料結構演算法】之單鏈表、雙鏈表、迴圈連結串列的基本介紹及其Java程式碼實現---第三篇

一、連結串列的基本介紹 連結串列的定義:連結串列是一種遞迴的資料結構,它或者為空(null),或者是指向一個結點(node)的引用,該結點含有一個泛型的元素和一個指向另一條連結串列的引用。----Algorithms  Fourth  Edition   常見的連結串

《一元一次方程解》虛擬碼Python程式碼實現

解一元一次方程虛擬碼:     class TreeStructure           expression:string               ->表示式           left:TreeStructure              ->左邊的樹

棧的陣列實現連結串列實現

棧的說明 棧是一種基本的資料結構。在棧中,被刪除的元素是最近被插入的元素,實現的是一種後進先出(last-in, first-out, LIFO)的策略。 改變棧中元素的操作方法只有兩個——push與pop。push是把元素推入棧底,pop是把元素從棧頂彈出。 下面是p

7 二分搜尋樹的原理Java原始碼實現

1 折半查詢法 瞭解二叉查詢樹之前,先來看看折半查詢法,也叫二分查詢法 在一個有序的整數陣列中(假如是從小到大排序的),如果查詢某個元素,返回元素的索引。 如下: int[] arr = new int[]{1,3,4,6,8,9}; 在 arr 陣列中查詢6這個元素,查到返回對應的索引,沒有找到就返回-