主頁 > 移動端開發 > Android 視圖影片

Android 視圖影片

2020-09-11 20:53:00 移動端開發

一、視圖影片標簽

0.概述

視圖影片有5中型別組成:
alpha:漸變透明度
scale:漸變尺寸伸縮
translate:畫面變換位置移動
rotate:畫面轉移旋轉移動
set:定義影片集

1.scale標簽

scale_anim.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">  	 //影片持續時間

    <scale
        android:fromXScale="0.1" //初始X軸的縮放
        android:fromYScale="0.1" //初始y軸的縮放
        android:toXScale="1.4"   //目標x軸的縮放
        android:toYScale="1.4"   //目標y軸的縮放
        android:pivotX="150"     //以控制元件的位置原點坐標,影片開始的起始位置x軸坐標
        android:pivotY="150"/>   //以控制元件的位置原點坐標,影片開始的起始位置y軸坐標
</set>

pivotX有三種數值:

150 直接數字,則是以控制元件為原點坐標的xy的坐標值(150,150),以目標控制元件為原點

150% 百分比的,是以控制元件為原點坐標的,為控制元件的寬度的150%的坐標,150%那就是控制元件寬度的150%

150%p 上面同理,但是以父控制元件的150%

java代碼

  startAnimBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //裝載影片 R.anim.scale_anim 為影片位置
                Animation scaleAnimation=AnimationUtils.loadAnimation(mContext,R.anim.scale_anim);
                //啟動影片
                scaleTV.startAnimation(scaleAnimation);
            }
        });

效果

scale.gif

2.共同屬性

所有影片都繼承自Animation類,所以有一些共同的屬性,

android:duration="3000"  //影片持續時間,毫秒單位
android:fillAfter="true" //true影片結束,保持控制元件結束時的狀態
android:fillBefore="true"//true影片結束,保持控制元件最初始狀態
android:repeatCount="3"  //影片重復次數,infinite表示無限回圈
android:repeatMode="restart" //重復的型別,restart表示從頭開始,reverse表示倒序回放
android:interpolator="@android:interpolator/accelerate_cubic" //插值器,控制速度等

看看回放和倒序回放
倒序回放:

android:repeatCount="3"
android:repeatMode="reverse"

倒序回放.gif

回放:

android:repeatCount="3"
android:repeatMode="restart"

回放.gif

3.alpha標簽

<alpha
  android:duration="3000" //持續時間
	android:fromAlpha="0.1" //初始透明度
	android:toAlpha="1"/>   //最大透明度  數值在0.0~1.0之間

效果:

透明度.gif

4.rotate標簽

<alpha
	android:fromAlpha="0.01" //初始角度
	android:toAlpha="1"/>    //旋轉角度  取值范圍可以為負值,為逆時針,正值為順時針

效果:

旋轉.gif

5.translate標簽

   <translate
        android:fromXDelta="50"  //以控制元件為原坐標,x軸加50 為起始X軸
        android:fromYDelta="50"  //以控制元件為原坐標,y軸加50 為起始y軸
        android:toXDelta="400"   //目標x軸
        android:toYDelta="400" /> //目標y軸

效果:

位移.gif

7.set標簽

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="8000"
    android:fillAfter="false"
    android:fillBefore="true">
    <scale
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="150"
        android:pivotY="150"
        android:toXScale="1.4"
        android:toYScale="1.4" />
    <alpha
        android:fromAlpha="0.5"
        android:toAlpha="1"/>
    <rotate
        android:fromDegrees="0.0"
        android:toDegrees="360"/>
    <translate
        android:fromXDelta="50"
        android:fromYDelta="50"
        android:toXDelta="300"
        android:toYDelta="300" />
</set>

效果:

完整影片.gif

二、視圖影片代碼實作

0.概述

這些標簽,都對應一個類,但他們都是派生自Animation類,

scale ScaleAnimation
alpha AlphaAnimation
rotate RotateAnimation
translate TranslateAnimation
set AetAnimation

1.ScaleAnimation

四個構造方法來加載scale影片

ScaleAnimation(Context context, AttributeSet attrs)
    
ScaleAnimation(float fromX, float toX, float fromY, float toY)
    
ScaleAnimation(float fromX, float toX, float fromY, float toY,
            float pivotX, float pivotY)
    
ScaleAnimation(float fromX, float toX, float fromY, float toY,
            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    

ScaleAnimation(
float fromX, //初始x軸的縮放

float toX, //目標縮放

float fromY, //初始y軸縮放

float toY, //目標y軸縮放

int pivotXType, float pivotXValue, //以原坐標為原點,x軸的起始點

int pivotYType, float pivotYValue) //以原坐標為原點,y軸的起始點

pivotXType的型別有:

RELATIVE_TO_SELF 百分比,相對自身百分比 50%

RELATIVE_TO_PARENT 百分比,相對父控制元件百分比 50%p

ABSOLUTE 具體數值 比如 50

2.AlphaAnimation

AlphaAnimation(Context context, AttributeSet attrs)
    
AlphaAnimation(float fromAlpha, float toAlpha)
    

AlphaAnimation(
float fromAlpha, //初始透明度

float toAlpha) //目標透明度

3.RotateAnimation

RotateAnimation(Context context, AttributeSet attrs)
    
RotateAnimation(float fromDegrees, float toDegrees)
    
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
    
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
            int pivotYType, float pivotYValue)    

RotateAnimation(
float fromDegrees, //初始角度

float toDegrees, //目標角度

int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue)

4.TranslateAnimation

TranslateAnimation(Context context, AttributeSet attrs)
    
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)  
    
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
            int fromYType, float fromYValue, int toYType, float toYValue)     

TranslateAnimation(
int fromXType, float fromXValue, //起始x軸坐標

int toXType, float toXValue, //目標x軸坐標

int fromYType, float fromYValue, //起始y軸坐標

int toYType, float toYValue) //目標y軸坐標

5.AnimationSet

AnimationSet(Context context, AttributeSet attrs)
    
AnimationSet(boolean shareInterpolator)   //true 共用一個插值器,false 各自定義插值器

都是繼承自Animation,有這些共同屬性

animationSet1.setDuration(3000);  //影片時長
animationSet1.scaleCurrentDuration(4.0f);  //當前影片時間
animationSet1.setFillAfter(true); //true影片結束,保持控制元件結束時的狀態
animationSet1.setFillBefore(true); //true影片結束,保持控制元件最初始狀態
animationSet1.setRepeatMode(Animation.RESTART); //回圈模式
animationSet1.setStartOffset(1000); //在什么時間停止影片
animationSet1.setStartTime(500); //在什么時間開始影片
animationSet1.setRepeatCount(5);  //回圈次數
animationSet1.setFillEnabled(true); //true影片結束,保持控制元件結束時的狀態

裝載所有影片效果

    		ScaleAnimation scaleAnimation1 = new ScaleAnimation(
                        0.0f,
                        1.4f,
                        0.0f,
                        1.4f,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);

                AlphaAnimation alphaAnimation1=new AlphaAnimation(0.1f,0.5f);
                RotateAnimation rotateAnimation1=new RotateAnimation(0.1f,0.1f);
                TranslateAnimation translateAnimation1=new TranslateAnimation(
                        Animation.ABSOLUTE,
                        50,
                        Animation.ABSOLUTE,
                        50);

                AnimationSet animationSet1=new AnimationSet(true); //裝載
                animationSet1.addAnimation(scaleAnimation1);
                animationSet1.addAnimation(alphaAnimation1);
                animationSet1.addAnimation(rotateAnimation1);
                animationSet1.addAnimation(translateAnimation1);

                animationSet1.setDuration(3000);
                animationSet1.scaleCurrentDuration(4.0f);
                animationSet1.setFillAfter(true);
                animationSet1.setFillBefore(true);
                animationSet1.setRepeatMode(Animation.RESTART);
                animationSet1.setStartOffset(1000);
                animationSet1.setStartTime(500);
                animationSet1.setRepeatCount(5);
                animationSet1.setFillEnabled(true);

6.Animation

animationSet1.cancel(); //取消影片
animationSet1.reset();  //將控制元件重置到初始化狀態
animationSet1.setAnimationListener(AnimationListener listener); //設定監聽

監聽,利用監聽可以實作影片的連續效果,比如,先實作縮放,再實作位移

  animationSet1.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        //影片開始
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        //影片結束
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        //影片結束
                    }
                });

三、基礎插值器

0.概述

控制影片變化速率的值,就叫插值器,也叫加速器,有Interpolator類來決定,

使用方法
在xml中使用:
android:interpolator="@android:anim/accelerate_interpolator"

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="3000"
    android:fillAfter="false"
    android:fillBefore="true">
</set>

在java代碼中使用;
animationSet1.setInterpolator(new AccelerateInterpolator());

1.系統插值器

系統已經定義了一些常見的插值器

AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 先加速,后減速
AccelerateInterpolator @android:anim/accelerate_interpolator 開始慢,后一直加速
DecelerateInterpolator @android:anim/decelerate_interpolator 開始一瞬間加到最大,后慢慢減慢
LinearInterpolator @android:anim/linear_interpolator 勻速加速器
BounceInterpolator @android:anim/bounce_interpolator 模擬自由落體回彈的效果
AnticipateInterpolator @android:anim/anticipate_interpolator 反方向效果一段時間,再執行正常影片,如,旋轉,先反旋轉一段距離
OvershootInterpolator @android:anim/overshoot_interpolator 影片結束之后,再執行一段時間
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 開始時,反方向效果一段時間,結束時,超過效果時間一段時間
CycleInterpolator(1) @android:anim/cycle_interpolator 影片特定回圈播放的次數,速率沿正弦曲線變化

四、影片示例

1.鏡頭由遠及近

控制元件

<ImageView
        android:id="@+id/img"
        android:src=https://www.cnblogs.com/lanjiabin/p/"@drawable/ali"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

java代碼


                ScaleAnimation scaleAnimation=new ScaleAnimation(
                        0.5f,
                        1.2f,
                        0.5f,
                        1.2f,
                        Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                scaleAnimation.setFillAfter(true);
                scaleAnimation.setInterpolator(new AccelerateInterpolator());
                scaleAnimation.setDuration(6000);
                imgIV.startAnimation(scaleAnimation);

效果:

由遠及近.gif

2.加載框效果

   <ImageView
        android:id="@+id/load"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:src=https://www.cnblogs.com/lanjiabin/p/"@drawable/load" />
     RotateAnimation rotateAnimation=new RotateAnimation(
                        0,
                        360,
                        Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                rotateAnimation.setFillAfter(true);
                rotateAnimation.setRepeatCount(Animation.INFINITE); //無限回圈
                rotateAnimation.setInterpolator(new LinearInterpolator()); //勻速
                rotateAnimation.setDuration(2000);
                loadIV.startAnimation(rotateAnimation);

效果:

加載.gif

編程中我們會遇到多少挫折?表放棄,沙漠盡頭必是綠洲,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7461.html

標籤:Android

上一篇:Android連載8-動態的添加碎片

下一篇:MacBook下載和編譯Android AOSP原始碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more