屬性動畫步驟總結——包含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這個元素,查到返回對應的索引,沒有找到就返回-