Android使用SVG實現今日頭條下拉重新整理動畫
1 SVG的全稱是Scalable Vector Graphics,叫可縮放向量圖形。它和點陣圖(Bitmap)相對,SVG不會像點陣圖一樣因為縮放而讓圖片質量下降。
2 Android L開始提供了新的API VectorDrawable 可以使用SVG(向量圖)型別的資源,在xml檔案中的標籤是vector。但想要好好的感受下SVG的使用,除了需要5.0之後的系統支援外,還需要使用AndroidStudio進行開發,因為AS已經支援通過右鍵建立SVG相關的檔案(親兒子的待遇,就像Nexus系列手機)。當然,eclipse也可以進行開發,只是沒有智慧提示和自動補全,一些屬性需要記住手動敲進去。
3 這篇文章使用SVG實現今日頭條的下拉重新整理動畫,體會一把SVG的用法(網上資料不多,畢竟國內對於系統更新的支援還是比較緩慢的)
效果
效果分析
1 方形順時針在四個角中移動
2 線條根據方形的移動而變化(包括位置變化和長度變化兩種)
實現分析
1 首先,使用vector標籤建立初始形態的svg圖形
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height ="200dp"
android:viewportHeight="200"
android:viewportWidth="200"
android:width="200dp" >
<path
android:name="path1"
android:pathData="
M20,30
L100,30
M100,30
L100,90
M100,90
L20,90
M20,90
L20,30"
android:strokeColor ="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path2"
android:pathData="
M120,30
L180,30 "
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path3"
android:pathData="
M120,60
L180,60"
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path4"
android:pathData="
M120,90
L180,90"
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path5"
android:pathData="
M20,120
L180,120"
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path6"
android:pathData="
M20,150
L180,150"
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
<path
android:name="path7"
android:pathData="
M20,180
L180,180"
android:strokeColor="@android:color/darker_gray"
android:strokeWidth="1" />
</vector>
需要為每個path設定name屬性,這是為了讓系統找到要實現動畫的元素
包含了兩組寬高屬性:
1 width和height:表示svg圖形的具體大小
2 viewportWidth和viewportHeight:表示svg劃分的比例
兩者的關係:將100dp劃分為100份,如果在繪製圖形時使用座標(20,20),則意味著該座標位於該svg圖形的(20,20)位置svg指令(包括但不限於)
1 M:將畫筆移動到某一個點上
2 L:代表從當前點繪製直線到指定點
3 A:用於繪製一段弧線,且允許弧線不閉合(可制定引數實現)
4 H:繪製水平線
5 V:繪製垂直線
2 通過animated-vector標籤制定動畫作用的path
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector" >
<target
android:name="path1"
android:animation="@animator/animator_path_one" />
<target
android:name="path2"
android:animation="@animator/animator_path_two" />
<target
android:name="path3"
android:animation="@animator/animator_path_three" />
<target
android:name="path4"
android:animation="@animator/animator_path_four" />
<target
android:name="path5"
android:animation="@animator/animator_path_five" />
<target
android:name="path6"
android:animation="@animator/animator_path_six" />
<target
android:name="path7"
android:animation="@animator/animator_path_sevent" />
</animated-vector>
每個target裡邊的name屬性與之前在vector中定義的name屬性必須保持一致
3 動畫實現(其中一個為例)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially" >
<objectAnimator
android:duration="400"
android:interpolator="@android:interpolator/decelerate_cubic"
android:propertyName="pathData"
android:valueFrom="
M20,30
L100,30
M100,30
L100,90
M100,90
L20,90
M20,90
L20,30"
android:valueTo="
M100,30
L180,30
M180,30
L180,90
M180,90
L100,90
M100,90
L100,30"
android:valueType="pathType" />
<objectAnimator
android:duration="400"
android:interpolator="@android:interpolator/decelerate_cubic"
android:propertyName="pathData"
android:valueFrom="
M100,30
L180,30
M180,30
L180,90
M180,90
L100,90
M100,90
L100,30"
android:valueTo="
M100,120
L180,120
M180,120
L180,180
M180,180
L100,180
M100,180
L100,120"
android:valueType="pathType" />
<objectAnimator
android:duration="400"
android:interpolator="@android:interpolator/decelerate_cubic"
android:propertyName="pathData"
android:valueFrom="
M100,120
L180,120
M180,120
L180,180
M180,180
L100,180
M100,180
L100,120"
android:valueTo="
M20,120
L100,120
M100,120
L100,180
M100,180
L20,180
M20,180
L20,120"
android:valueType="pathType" />
<objectAnimator
android:duration="400"
android:interpolator="@android:interpolator/decelerate_cubic"
android:propertyName="pathData"
android:valueFrom="
M20,120
L100,120
M100,120
L100,180
M100,180
L20,180
M20,180
L20,120"
android:valueTo="
M20,30
L100,30
M100,30
L100,90
M100,90
L20,90
M20,90
L20,30"
android:valueType="pathType" />
</set>
1 定義了一個動畫集合,裡邊包含了四個屬性動畫,而且為順序執行(android:ordering=”sequentially”)
2 通過android:propertyName=”pathData”設定動畫控制的屬性為路徑
3 android:valueFrom指定了動畫的起始,android:valueTo指定了動畫的結束
4 這裡,還需要新增一個android:valueType=”pathType”來告訴系統是進行pathData變換
4 使用
經過上邊的步驟,一個svg動畫就實現了。
// 將該drawable設定給ImageView
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/animated_svg" />
// 啟動動畫(類似於AnimationDrawable的使用 )
Animatable animatable = (Animatable) imageView.getDrawable();
animatable.start();
總結
經過上邊的步驟,就使用svg實現了今日頭條下拉重新整理的動畫。當然,這裡只是用到了svg其中的一些知識;需要更多的瞭解svg,還是需要多些例子,多學習。
相關推薦
Android使用SVG實現今日頭條下拉重新整理動畫
1 SVG的全稱是Scalable Vector Graphics,叫可縮放向量圖形。它和點陣圖(Bitmap)相對,SVG不會像點陣圖一樣因為縮放而讓圖片質量下降。 2 Android
android仿今日頭條下拉重新整理中的vector動畫
一直有留意到今日頭條下拉重新整理的效果, 真的很贊,在學習了svg drawable相關資料後, 參考部落格http://blog.csdn.net/u012950099/article/details/52040028完成了今日頭條下拉重新整理中的動畫, 首先看下效果圖:
Android UI- PullToRrefresh自定義下拉重新整理動畫
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
最簡單的RecyclerView下拉重新整理動畫
首先我們的RecyclerView的根佈局是LinearLayout,所以這裡用的是LinearLayout.LayoutParams,如果是其他佈局,就用相應的LayoutParams。 首先是設定的程式碼: recyclerView.
Android scrollview中巢狀listview實現listview的下拉重新整理上拉載入更多
我們都知道在Android中scrollview和listview都能滑動,如果scrollview巢狀listview會出現一些問題,比如listview不能正常顯示item...但是在一些專案中,一些頁面內容比較多,需要在外面放一個scrollview,裡面還會巢狀li
手把手教你實現RecyclerView的下拉重新整理和上拉載入更多
個人原創,轉載請註明出處http://blog.csdn.net/u012402124/article/details/78210639 2018年10月25日更新 讓大家花費時間看文章卻沒有解決需求,隨著bug的增多內心的愧疚感逐漸增強,但幾個月前的程式
SwipeRefreshLayout原始碼分析+自定義UC頭條下拉重新整理Demo
首先來看SwipeRefreshLayout(以下簡稱SR)的繼承關係 NestedScrollingParent:巢狀滑動父介面 NestedScrollingChild :巢狀滑動子介面 Android 就是通過這兩個介面, 來實現 子View
android PullToRrefresh自定義下拉重新整理動畫
參考自 http://blog.csdn.net/wwj_748/article/details/42523611 首先,下載著名的重新整理框架https://github.com/chrisbanes/Android-PullToRefresh,其中simple為de
輕鬆實現RecycleView的下拉重新整理、載入更多
那如同這個題目,這裡面涉及的東西其實還是比較多的,RecycleView SwipeRefreshLayout,下拉重新整理(這個就是SwipeRefreshLayout的),載入更多。 SwipeRefreshLayout 這個是Google自己封
詳解RecyclerView+BGARefreshLayout實現自定義下拉重新整理、上拉載入和側滑刪除效果
前言 還有2個月就過年了,對於我們這樣在外漂泊的異鄉人來說,一家人團聚在一起,吃一頓團圓飯,那是再幸福不過的事了。我們之所以遠離家鄉來到異鄉就像異鄉人這首歌寫的一樣,只為一扇窗! 正文 上篇文章給大家講解了一下關於RecyclerView的使用,今天給
Android 仿天貓京東淘寶 首頁的 title欄變色和下拉重新整理動畫效果
一 啥也不說了 先看效果吧 二 實現原理 1 關於 title欄的變色 其實就是根據手指移動的距離,去改變 title欄背景顏色的透明度。其他的變化就根據專案的需要來 比如字型變色啊 搜尋框變色啊 在這裡 我自定義了一個scrollView 繼
Android自定義控制元件實戰——實現仿IOS下拉重新整理上拉載入 PullToRefreshLayout
下拉重新整理控制元件,網上有很多版本,有自定義Layout佈局的,也有封裝控制元件的,各種實現方式的都有。但是很少有人告訴你具體如何實現的,今天我們就來一步步實現自己封裝的 PullToRefreshLayout 完美的解決下拉重新整理,上拉載入問題。
Android自定義下拉重新整理動畫--仿百度外賣下拉重新整理
好久沒寫部落格了,小編之前一段時間一直在找工作,從天津來到了我們的大帝都,感覺還不錯。好了廢話不多說了,開始我們今天的主題吧。現如今的APP各式各樣,同樣也帶來了各種需求,一個下拉重新整理都能玩出花樣了,前兩天訂飯的時候不經意間看到了“百度外賣”的下拉重新整理,今天
android 自定義下拉重新整理動畫效果
今天公司讓把官方的下拉重新整理動畫改一下,自己仔細讀pullTorefresh原始碼,終於發現了蛛絲馬跡,現我就自己理解將修改步驟給大家講解一下。 本篇博文要給大家分享的是如何使用修改開源專案PullToRrefresh下拉重新整理的動畫,來滿足我們開發當中特定的需
修改PullToRefresh下拉重新整理動畫
開源框架PullToRefresh在android開發中的使用非常廣泛,通常我們使用PullToRefresh是將這樣的專案作依賴新增到自己的專案上,但是這樣我們需要上傳依賴專案和自己的專案,雖然這並不存在任何問題。然,一個有強迫症的程式Yuan,為了專案的整潔
實現下拉重新整理,上拉載入可自定義各種動畫
一、使用說明 1、UltimateRefreshView 支援ListView,GridView,ScrollView,WebVIew,RecyclerView(只支援LinearLayoutManager). 2、佈局使用: 1 2 3 4 5 6 7 8 9 1
andbase框架實現上拉載入,下拉重新整理和自定義旋轉動畫的方式
1、今天做列表時,需求上需要做一個下拉重新整理,下拉載入更多的功能,就上網找了一些例子,由於我原來用的就是andbase框架,就還是用它原來寫的了。其中同事給我推薦另一個框架BGARefreshLayout-Android,下載地址https://github.com/bin
[log] vue使用Mint元件實現下拉重新整理、上拉載入
https://mint-ui.github.io/docs/#/zh-cn2/loadmore 使用的vue <mt-loadmore :top-method="loadTop" :bottom
WaveSwipeRefreshLayout +RecyclerView 實現簡單的水滴下拉重新整理
第一步: 1.在app build.gradle中加入依賴: implementation 'com.github.recruit-lifestyle:WaveSwipeRefreshLayout:1.6' 2.AndroidManifest中新增網路許可權
Android從零擼美團(二) - 仿美團下拉重新整理自定義動畫
這是【從零擼美團】系列文章第二篇。 專案地址:github.com/cachecats/L… 今天寫了下拉重新整理,框架用的是 SmartRefreshLayout ,不為啥,因為 Github 上它有 9.5k 個 star,中文支援好節省時間。 先上圖: 一、分析 美團的下拉載入動