android 张口逐帧动画,《Android 动画》逐帧动画
關于 Android 的動畫學習可以分為以下幾個大類:
逐幀動畫
補間動畫(也說 View 動畫)
屬性動畫
轉場動畫
這里注意,我只是從學習的角度分為了這四類;從面試的角度,只需要說前面三類,轉場動畫只是一種動畫形態,不是一個類別。
本篇詳細學習逐幀動畫。
主要內容
逐幀動畫的概念
如何使用
實戰操作
什么是逐幀動畫?
小時候大家可能做過一件事情,在書的一角,每一頁都畫一個圖,然后快速翻看,就形成了連續的動畫效果,這就是逐幀動畫。視頻技術也一樣,要求1秒內達到多少幀,通過視覺停留讓我們感覺是連貫的影片,如果單位時間內的幀數很少,那我們就會感到明顯的頓挫感。
如何使用?
1、通過上面的描述我們已經了解到逐幀動畫就是一幀一幀連續播放的效果。
2、準備好一組圖片,這組圖片連續播放后能形成視頻的感覺。比如日落效果,我們可以準備一組不同位置的太陽圖片,由高到低;比如汽車前行的效果,準備一組行駛在路上不同位置的汽車照片,每張圖片中汽車的位移相差1米。圖片的數量可以是任意的,5張、10張、20張,給每張圖片設定一個顯示的時間,例如200毫秒,那么這些圖片就會每200毫秒依次播放,最終形成逐幀動畫的效果。
實戰操作
先看下面這張Gif圖:
逐幀動畫實現Loading效果
我們看到是一個持續旋轉加載的效果,但這其實是8張靜態圖片通過逐幀動畫實現的。
8張靜態圖片
首先我們將制作好的8張圖片放到項目目錄 res/drawable-xxhdpi 下面(沒有這個文件夾的話可以新建一個),然后在 drawable 文件夾下新建一個動畫 xml 文件。
右擊 drawable 文件夾,選擇 New -> Drawable resource file,如下圖:
新建動畫xml文件
輸入文件名,比如 progress_round,Root element 選擇 animation-list
輸入文件名,選擇 Root element
progress_round.xml:
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
按照上面的寫法,android:oneshot="false" 表示循環播放,如果為 true 的話,則只播放一次便停止在最后一張圖。有幾張圖片就寫幾個item,duration 表示這張圖片的播放時長,單位是毫秒,這里是200毫秒。
接著在頁面布局文件中放置一個 ImageView 控件,給 ImageView 設置 background,引用上面的 progress_round.xml 動畫文件。
activity_anim_frame.xml:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp">
android:id="@+id/btn_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/progress_round"
android:layout_centerInParent="true"/>
但是注意,設置完了 background 之后,動畫并不會播放,因為默認是不播放,需要我們在代碼中調用 AnimationDrawable 的 start() 方法來啟動,如果需要停止的話,可以調用 AnimationDrawable 的 stop() 方法。
FrameAnimActivity.class:
package com.skypan.helloworld.anim;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import com.skypan.helloworld.R;
public class FrameAnimActivity extends AppCompatActivity {
private ImageView mIvFrame;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anim_frame);
mIvFrame = (ImageView) findViewById(R.id.btn_frame);
AnimationDrawable animationDrawable = (AnimationDrawable) mIvFrame.getBackground();
animationDrawable.start();
}
}
把用到的圖片分享給大家
資源圖片
謝謝支持!
歡迎關注微信公眾號:程序員都關注
總結
以上是生活随笔為你收集整理的android 张口逐帧动画,《Android 动画》逐帧动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PB中使用FORMULA ONE
- 下一篇: xp系统开启iis服务器,Windows