Android 補間動畫學習
Android 補間動畫
1.各種動畫的詳細講解
這裡的android:duration都是動畫的持續時間,單位是毫秒~
———————————————————————————————————————
(1)AlphaAnimation(透明度漸變)
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0"
android:duration="2000"/>
<!-- fromAlpha :起始透明度-->
<!-- toAlpha:結束透明度-->
<!-- 透明度的範圍為:0-1,完全透明-完全不透明-->
———————————————————————————————————————
(2)ScaleAnimation(縮放漸變)
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="0.2"
android:toXScale="1.5"
android:fromYScale="0.2"
android:toYScale="1.5"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"/>
<!-- fromXScale/fromYScale:沿著X軸/Y軸縮放的起始比例-->
<!-- toXScale/toYScale:沿著X軸/Y軸縮放的結束比例-->
<!-- pivotX/pivotY:縮放的中軸點X/Y座標,即距離自身左邊緣的位置,比如50%就是以影像的 中心為中軸點-->
———————————————————————————————————————
(3)TranslateAnimation(位移漸變)
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="320"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"/>
<!-- fromDegrees/toDegrees:旋轉的起始/結束角度-->
<!-- repeatCount:旋轉的次數,預設值為0,代表一次,假如是其他值,比如3,則旋轉4次 另外,值為-1或者infinite時,表示動畫永不停止-->
<!-- repeatMode:設定重複模式,預設restart,但只有當repeatCount大於0或者infinite或-1時 才有效。還可以設定成reverse,表示偶數次顯示動畫時會做方向相反的運動!-->
———————————————————————————————————————
(4)RotateAnimation(旋轉漸變)
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:duration="1000"
android:repeatCount="infinite"
android:repeatMode="reverse"/>
<!-- fromDegrees/toDegrees:旋轉的起始/結束角度-->
<!-- repeatCount:旋轉的次數,預設值為0,代表一次,假如是其他值,比如3,則旋轉4次 另外,值為-1或者infinite時,表示動畫永不停止-->
<!-- repeatMode:設定重複模式,預設restart,但只有當repeatCount大於0或者infinite或-1時 才有效。還可以設定成reverse,表示偶數次顯示動畫時會做方向相反的運動!-->
———————————————————————————————————————
(5)AnimationSet(組合漸變)
這個就是前面幾個屬性組合
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0"
android:duration="2000"/>
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:duration="1000"
android:repeatCount="infinite"
android:repeatMode="reverse"/>
<!-- fromAlpha :起始透明度-->
<!-- toAlpha:結束透明度-->
<!-- 透明度的範圍為:0-1,完全透明-完全不透明-->
</set>
組合漸變可以使用set作為根節點
——————————————————————————————————————
2.例項體驗
下面我們就用上面的動畫來寫個例子,先來寫個佈局頁面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_alpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="透明度漸變"/>
<Button
android:id="@+id/btn_scale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="縮放漸變"/>
<Button
android:id="@+id/btn_translate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="位移漸變"/>
<Button
android:id="@+id/btn_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋轉漸變"/>
<Button
android:id="@+id/btn_alpha_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="透明_旋轉"/>
<ImageView
android:id="@+id/animate_imge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_animation"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
———————————————————————————————————————
好的,接著到我們的MainActivity.java,同樣非常簡單,只需呼叫AnimationUtils.loadAnimation() 載入動畫,然後我們的View控制元件呼叫startAnimation開啟動畫即可~
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private Button alphaBtnOut,alphaBtnin,translateBtn,rotateBtn,alpharotateBtn,scaleBtn;
private ImageView aniImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aniImg = findViewById(R.id.animate_imge);
//透明度動畫
alphaBtnin = findViewById(R.id.btn_alpha_in);
alphaBtnin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha_in);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
aniImg.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
aniImg.startAnimation(animation);
}
});
//縮放動畫
scaleBtn = findViewById(R.id.btn_scale);
scaleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_scale);
aniImg.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
//位移動畫
translateBtn = findViewById(R.id.btn_translate);
translateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_translate);
aniImg.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
//旋轉動畫
rotateBtn = findViewById(R.id.btn_rotate);
rotateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_rotate);
aniImg.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
alpharotateBtn = findViewById(R.id.btn_alpha_rotate);
alpharotateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation1
=AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_alpha_rotate);
aniImg.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
}
}
3.動畫狀態的監聽
我們可以對動畫的執行狀態進行監聽,呼叫動畫物件的:
setAnimationListener(new AnimationListener())方法,重寫下面的三個方法:
onAnimationStart():動畫開始
onAnimtaionRepeat():動畫重複
onAnimationEnd():動畫結束
即可完成動畫執行狀態的監聽~
總結
給大家講解了下Android中的第二種動畫(漸變動畫),四種動畫的詳解,以及 設定動畫監聽器。
相關文章
- Android 補間動畫Android動畫
- 學習 PixiJS — 補間動畫JS動畫
- 【Android 動畫】動畫詳解之補間動畫(一)Android動畫
- Android備忘錄《View動畫(補間動畫)》AndroidView動畫
- 補間動畫動畫
- Flutter補間動畫Flutter動畫
- Flutter——動畫基礎(補間動畫)Flutter動畫
- Android日常學習:Android檢視動畫-View AnimationAndroid動畫View
- Android 動畫:這是一份詳細 & 清晰的 動畫學習指南Android動畫
- Android動畫Android動畫
- android 動畫Android動畫
- Android 動畫之屬性動畫Android動畫
- 學習 PixiJS — 動畫精靈JS動畫
- Android之動畫Android動畫
- Android 動畫初探Android動畫
- 系統學習iOS動畫之一:檢視動畫iOS動畫
- 系統學習iOS動畫之三:圖層動畫iOS動畫
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- 【Android 動畫】動畫詳解之屬性動畫(三)Android動畫
- 【Android 動畫】動畫詳解之屬性動畫(五)Android動畫
- QT學習筆記4(動畫)QT筆記動畫
- 系統學習iOS動畫之六:3D動畫iOS動畫3D
- Flutter學習之佈局、互動、動畫Flutter動畫
- Android 幀動畫使用Android動畫
- android屬性動畫Android動畫
- Android 轉場動畫Android動畫
- Android 動畫實現Android動畫
- Android:動畫詳解Android動畫
- 系統學習iOS動畫之七:其它型別的動畫iOS動畫型別
- Flutter學習(六) 動畫以及動效相關Flutter動畫
- Flutter學習指南:互動、手勢和動畫Flutter動畫
- Blend學習之Loading載入動畫動畫
- Servlet學習補充Servlet
- Android動畫深入分析Android動畫
- Android Lottie動畫庫研究Android動畫
- Android全套動畫使用技巧Android動畫
- Android 動畫框架實現Android動畫框架
- Android動畫:行雲流水的向量圖示動畫Android動畫