編輯:關於Android編程
上一篇我們說到的逐幀動畫和補間動畫,這篇我們著重說下屬性動畫:
先看下面兩幅動畫:
上面兩幅動畫就是通過屬性動畫做出來的,是不是比較炫呢!不僅有顯示,也有交互點擊事件。下面我們一步一步的進行講解:
首先創建一個布局activity_property文件:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
一:ObjectAnimator對象介紹,在PropretyActivity裡面我們來看下屬性動畫效果
package com.fshsoft.AnimatorDemo;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
/**
* 屬性動畫
*/
public class PropertyActivity extends Activity implements View.OnClickListener {
private ImageView imageProperty;
private Button propertyStartBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property);
imageProperty = (ImageView) findViewById(R.id.imageProperty);
propertyStartBtn = (Button) findViewById(R.id.propertyStartBtn);
imageProperty.setOnClickListener(this);
propertyStartBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.imageProperty:
Toast.makeText(this,"圖片點擊事件",Toast.LENGTH_SHORT).show();
break;
case R.id.propertyStartBtn:
//通過ObjectAnimator對象讓動畫在x軸移動
ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F).setDuration(1000).start();
break;
default:
break;
}
}
}
運行效果:
屬性動畫,只需要上面的一句話就可以實現,圖片移動之後,點擊圖片有相應的事件,可以進行交互的操作。
接下來繼續在onClick()裡面添加動畫:
//通過ObjectAnimator對象讓動畫在x軸移動
ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F).setDuration(1000).start();
//通過ObjectAnimator對象讓動畫在Y軸移動
ObjectAnimator.ofFloat(imageProperty,"translationY",0F,400F).setDuration(1000).start();
//通過ObjectAnimator對象讓動畫旋轉360度
ObjectAnimator.ofFloat(imageProperty,"rotation",0F,360F).setDuration(1000).start();
運行效果:
二:我們還可以使用PropertyValuesHolder來實現相同的效果
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX",0F,400F);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY",0F,400F);
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation",0F,360F);
ObjectAnimator.ofPropertyValuesHolder(imageProperty,p1,p2,p3).setDuration(1000).start();
運行效果是一樣的,但是它的好處在於提高效率,優化系統資源。
三:下面我們繼續來看AnimatorSet,利用這個對象,我們同樣可以實現上面的效果:
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageProperty,"translationY",0F,400F);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageProperty,"rotation",0F,360F);
AnimatorSet set = new AnimatorSet();
set.playTogether(animator1,animator2,animator3);
set.setDuration(1000);
set.start();
AnimatorSet給我們提供了更多的方法,set.playTogether();三個同時進行展示動畫,我們更改一下代碼:
//set.playTogether(animator1,animator2,animator3);
set.playSequentially(animator1,animator2,animator3);
set.playSequentially()是按照先後順序依次展示動畫,效果如下:
接下來,我們想讓圖片同時在x軸和y軸上運動,然後在旋轉,該怎麼做呢?
//set.playTogether(animator1,animator2,animator3);
//set.playSequentially(animator1,animator2,animator3);
set.play(animator1).with(animator2);
set.play(animator3).after(animator2);
根據字面的意思很顯然用了play().with()這個是同時進行的,
然後再根據play().after()做了剩下的操作
四:屬性動畫的點擊事件介紹
創建一個activity_click.xml布沮喎?/kf/yidong/wp/" target="_blank" class="keylink">WPC9wPg0KPHByZSBjbGFzcz0="brush:java;">
然後在ClickActivity裡面:我們通過對ObjectAnimator設置監聽事件addListener(new Animator.AnimatorListener(){}然後重寫四個方法,onAnimationEnd()這個方法裡面我寫了一個Toast,表示動畫結束之後填出對話框信息
package com.fshsoft.AnimatorDemo;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class ClickActivity extends Activity implements View.OnClickListener {
private Button clickBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_click);
clickBtn = (Button) findViewById(R.id.clickBtn);
clickBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//設置透明度動畫效果
ObjectAnimator animator = ObjectAnimator.ofFloat(clickBtn,"alpha",0F,1F);
animator.setDuration(1000);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
Toast.makeText(ClickActivity.this,"動畫結束顯示信息",Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
}
}
運行如下:
一般情況下我們使用onAnimationEnd()這個比較多,就是動畫結束之後彈出Toast,所以我們谷歌給我們提供了AnimatorListenerAdapter(),選擇性的添加重寫的方法,同樣可以實現相同的效果
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
Toast.makeText(ClickActivity.this,"動畫結束顯示信息",Toast.LENGTH_SHORT).show();
}
});
基本視圖介紹1.文本 按鈕與輸入框文本 按鈕 輸入框的繼承關系TextView:android:text=”文本”android:textSize
(一)概述本節,我們繼續來研究Service(服務)組件,本節將會學習下Android中的AIDL跨進程通信的一些 概念,並不深入到源碼層次,暫時知道是什麼,會用即可!(
模式的定義 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 使用場景 用電源接口做例
前面照著android系統的裁剪圖片的功能自己寫了一個相似的工具。功能是大體上實現了,但留下了一個調用的問題:如何從我的程序調用這個裁剪工具,並且獲得裁剪後的圖片呢?其實