android 减速动画,Android View Animation
概述
可譯為視圖動畫,分為
縮放動畫
平移動畫
漸變動畫
旋轉動畫
Android系統中定義了一個抽象類Animation來定義這種視圖動畫,它的具體子類如下表:
動畫名稱
對應的子類
xml中標簽
描述
縮放動畫
ScaleAnimation
< scale />
S
平移動畫
TranslateAnimaiton
< translate />
T
漸變動畫
AlphaAnimation
< alpha />
A
旋轉動畫
RoateAnimation
< roate />
R
動畫集合
AnimationSet
< set />
是用來存放上面四種動畫的集合,容器的概念而已
這類動畫也被稱作是補間動畫(Tween Animation),取他們首字母這樣樣記憶呢 STAR 動畫如何?(哈哈別鬧,我自稱), “明星” 動畫是Android提供最早的動畫框架,只能這幾種效果或者他們的組合效果(明星獨唱或者組合嘍),使用起來也是非常方便簡單,可以代碼實現也可以在XML中定義使用。
那么這些視圖動畫有哪些通用屬性,這里列舉了父類Animaiton常用屬性:
xml中屬性
對應的方法
描述
android:duration
setDuration(long)
指定動畫持續時間,單位毫秒
android:fillAfter
setFillAfter(boolean)
設置為true時,指動畫結束時界面會停留在動畫播放完時的界面,默認false
android:fillBefore
setFillBefore(boolean)
指動畫結束時畫面停留在此動畫的第一幀
android:fillEnabled
setFillEnabled(boolean)
該方法用于使能填充效果。當該方法設置為true時,將執行setFillBefore和setFillAfter方法,否則將忽略setFillBefore和setFillAfter方法
android:interpolator
setInterpolator(Interpolator)
指定動畫的插值器類型,比如常見類型有
accelerate_interpolator 加速-動畫插入器;
decelerate_interpolator 減速- 動畫插入器;
accelerate_decelerate_interpolator 加速-減速 動畫插入器
android:repeatCount
setRepeatCount(int)
指定動畫的重復次數
android:repeatMode
setRepeatMode(int)
定義動畫的重復模式,該類中指定了兩個常量值
RESTART 值為1,表示重新開始
REVERSE 值為2,表示play backward
android:startOffset
setStartOffset(long)
動畫之間的時間間隔,從上次動畫停多少時間開始執行下個動畫
android:zAdjustment
setZAdjustment(int)
定義動畫的Z Order的改變,有三個常量值:
ZORDER_NORMAL 值為0,保持Z Order不變
ZORDER_TOP 值為1,保持在最上層
ZORDER_BOTTOM值為-1,保持在最下層
使用
文件存放位置:
res/anim/filename.xml
資源引用:
In Java: R.anim.filename
In XML: @[package:]anim/filename
XML中實現通常做法是:
對應目錄下定義一個動畫文件(在Android studio中直接new --> android resources file,然后選擇對應的root標簽和目錄即可,會自動創建anim文件夾)
在資源文件中添加標簽等具體的動畫屬性值
在代碼中使用AnimationUtils來加載定義好的動畫文件,會返回一個Animation對象,然后將其附在view控件上即可
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scal);
imageView.startAnimation(animation);
代碼實現通常做法:
創建一個AnimationSet對象,并設置相關屬性,比如插值器等,后續會具體講解
創建你想要的某一種或多種動畫對象,包括動畫執行時間等
然后將這些對象添加到這個AnimationSet對象中
使用控件對象開始執行這個動畫集合
AnimationSet animationSet = new AnimationSet(true);
比如創建一個縮放動畫ScaleAnimation scale;
animationSet.addAnimation(scale);
imageView.startAnimation(animationSet);
AnimationSet
這個類對應的標簽是< set/>,相當于一個容器,來存放其他四種動畫或者是子容器的(動畫集合嵌套動畫集合)
// 指定一個差值器,如果是調用系統內置差值器,包名即為android
android:interpolator="@[package:]anim/interpolator_resource"
// **獨有屬性** 如果是true 表示它的所有子元素標簽都共用這個差值器
android:shareInterpolator=["true" | "false"] >
ScaleAnimation
//動畫起始時x軸伸縮尺寸,取值float型,1.0表示不變
android:fromXScale="float"
//動畫結束時x軸伸縮尺寸,取值float型,1.0表示不變
android:toXScale="float"
//動畫起始時Y軸伸縮尺寸,取值float型,1.0表示不變
android:fromYScale="float"
//動畫結束時Y軸伸縮尺寸,取值float型,1.0表示不變
android:toYScale="float"
//縮放的中心點,x軸點位置
android:pivotX="float"
//縮放的中心點,Y軸點位置
android:pivotY="float" />
值得注意的是,這里的縮放的軸心位置pivotX pivotY在xml中依然有三種形式的取值:
50% 自身的百分比
50%p 父容器的百分比
50 具體的數值
它們都是相當于在view的(x,y)坐標上加上 軸點的值 確定的位置,比如android:pivotX="50%" 那么就表示這個軸點的x位置是 它自身的x坐標加上 它自身寬度的一半
privotX = 50%
DEMO
首先定義一個布局文件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.smart.myapplication.animation.ViewAnimationAct">
android:layout_width="300dp"
android:background="#00ffff"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:layout_height="200dp">
android:id="@+id/imageView"
android:scaleType="center"
android:layout_gravity="center"
android:src="@drawable/girl"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:id="@+id/start_anim"
android:layout_alignParentBottom="true"
android:text="縮放"
android:layout_width="wrap_content"
android:background="#2efe4f"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"
/>
xml動畫文件:
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
android:duration="2000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="1.5"
android:toYScale="1.5" />
然后在代碼中使用這個動畫文件:
public class ViewAnimationAct extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_animation);
imageView = (ImageView) findViewById(R.id.imageView);
final Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale_anim);
findViewById(R.id.start_anim).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(animation);
}
});
}
}
直接看效果(錄屏反應慢,實際動畫時間就兩秒)
縮放動畫
TranslateAnimation
xml中標簽中獨有屬性:
android:fromXDelta="float|percent" // 動畫開始的點離當前View的 X坐標上的差值
android:toXDelta="float|percent" // 動畫結束的點離當前View的 X坐標上的差值
android:fromYDelta="float|percent" // 動畫開始的點離當前View的 Y坐標上的差值
android:toYDelta="float|percent" // 動畫結束的點離當前View的 Y坐標上的差值
/>
這四個屬性值支持三種形式的參數:
view自身寬或者高的百分比,范圍是-100% -- 100%
x方向的差值(xDelta)就是取得view自身的width 然后作以百分比作為差值
y方向的差值(yDelta)就是取得view自身的height 然后作以百分比作為差值
view父View的寬或者高的百分比,范圍是 -100%p -- 100%p
x方向的差值(xDelta)就是取得view的父控件的width 然后作以百分比作為差值
y方向的差值(yDelta)就是取得view的父控件的height 然后作以百分比作為差值
具體位置的像素值 比如 50
**都是以view的(x,y)坐標變換,相當于給他一個transitionX,transitionY
**
DEMO:
頁面布局文件(后續的布局和activity中代碼實現類似,不在貼出):
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.smart.myapplication.animation.ViewAnimationAct">
android:id="@+id/imageView"
android:scaleType="center"
android:src="@drawable/girl"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
對應的xml中動畫文件:
android:duration="2000"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:repeatCount="1"
android:repeatMode="reverse"
android:toXDelta="80%"
android:toYDelta="80%" />
對應的效果
平移動畫
AlphaAnimation
是一種改變透明度的動畫,漸進漸出,默認的透明度都是1表示不透明。對應< alpha/>標簽,兩個獨有屬性:
android:fromAlpha="float" // 從一個透明度
android:toAlpha="float" // 變化到另一個透明度
/>
這兩個屬性值的取值:透明度范圍為0.0(完全不可見) --- 1.0(不透明)
DEMO
動畫文件:
android:duration="2000"
android:fromAlpha="1.0"
android:repeatCount="1"
android:repeatMode="reverse"
android:toAlpha="0" />
對應的效果:
漸變動畫
RoateAnimation
旋轉動畫,給定一個軸心和旋轉的角度,組成一個旋轉的動畫效果。對應的標簽是< roate/>
// 旋轉的開始角度
android:fromDegrees="float"
// 旋轉結束的角度
android:toDegrees="float"
// 旋轉的軸心,x位置
android:pivotX="float"
// 旋轉的軸心,y位置
android:pivotY="float" />
需要說明的是:
旋轉的起始角度可以有正負,并且支持任意角度旋轉,比如從0到720,那么會旋轉兩周
privotX 和 privotY 和縮放動畫軸心取值一樣,也有三種形式,其實定義的就是圓心的位置
DEMO
動畫文件:
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
對應的效果
旋轉動畫
上述列舉了每一種動畫獨有的屬性,但是別忘了他們共有的屬性定義,比如動畫執行完停留的位置控制,重復播放動畫,多個動畫組合時提供不同的時間偏移等等
總結
以上是生活随笔為你收集整理的android 减速动画,Android View Animation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光大炎黄信用卡额度一般是多少
- 下一篇: 电汇多久到账?电汇和转账的区别