聊一聊Android中的StateListAnimator

簡評:使用 StateListAnimator 輕松實現 Material Design 效果。

專注于為中小企業提供成都網站設計、網站制作、外貿營銷網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業靖安免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了千余家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

Material Design 中最基礎的一條原則就是 'motion provides meaning',也就是當用戶和你的 app 交互時應當提供合理的視覺反饋。標準做法是使用官方提供的 StateListDrawable 來為控件實現交互效果。

StateListAnimator 是和 Material Design 一同在 API 21 引入的,可以用來方便的實現交互反饋的視覺效果,今天這篇文章就講解了 StateListAnimator 的用法。

在以前,我們處理 Button,TextView 等控件的點擊效果時,通常是定義一個 selector,為按下和普通情況分別設置顏色。但這樣的效果一方面不夠動人,另一方面也不符合 Material Design 的規范。

Material Design 規范推薦 Button 等控件應當以材質的方式表現,當接觸到手指時上升。因此 Material Design 對組件有了 z 軸這個概念,也就是高度。z 值越大,組件離界面底層(水平面)越遠,投影越重。

那我們怎么來實現組件在 z 軸(高度)上的變化效果呢?這就需要用到今天講到的 StateListAnimator 了。

首先,讓我們創建一個 animator 資源文件夾,在其中創建一個 selector_animator.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true">
 <set>
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="scaleX"
  android:valueTo="1.025"
  android:valueType="floatType" />
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="scaleY"
  android:valueTo="1.025"
  android:valueType="floatType" />
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="translationZ"
  android:valueTo="4dp"
  android:valueType="floatType" />
 </set>
 </item>
 
 <item>
 <set>
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="scaleX"
  android:valueTo="1.0"
  android:valueType="floatType" />
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="scaleY"
  android:valueTo="1.0"
  android:valueType="floatType" />
  <objectAnimator
  android:duration="@android:integer/config_shortAnimTime"
  android:propertyName="translationZ"
  android:valueTo="0dp"
  android:valueType="floatType" />
 </set>
 </item>
 </selector>

代碼很簡單,當處于按下情況時,組件沿 x, y 軸擴大 1.025 倍并升高 4dp(會在組件四周產生投影效果)。

需要注意其中的 propertyName 屬性目前支持:

  • translationX, translationY: 控制組件沿 x 和 y 軸移動多少距離。
  • rotation, rotationX, rotationY: 繞中心點旋轉,設置 rotation 是 2D 平面旋轉,rotationX 和 rotationY 分別是從屏幕內向屏幕外旋轉和從左到右旋轉,均為 3D 旋轉。
  • scaleX, scaleY: 沿 x, y 軸的縮放比例,設置為 1.5 即 1.5 倍。
  • pivotX, pivotY: 設置組件的中心點在哪里,scale 和 rotation 都會根據設置的中心點來變化,默認為幾何中心。
  • x, y: 組件最終要出現在相對其父容器的位置。
  • alpha: 組件的透明度,值的范圍從 0 到 1,為 0 時完全透明。

然后在 layout 文件中設置組件的 stateListAnimator 值就可以啦:

<TextView
 android:id="@+id/textView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 ... 
 android:stateListAnimator="@animator/selector_animator" />

因為知乎不支持 gif,感興趣的同學可以點擊原文鏈接查看實現效果。

原文:StateListAnimator

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創新互聯的支持。

文章名稱:聊一聊Android中的StateListAnimator
本文URL:http://m.kartarina.com/article2/pihpic.html

成都網站建設公司_創新互聯,為您提供網站排名域名注冊虛擬主機網站營銷ChatGPT網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都seo排名網站優化
主站蜘蛛池模板: 国精品无码一区二区三区在线| 亚洲熟妇无码八V在线播放| 国产午夜av无码无片久久96| 亚洲成a人无码亚洲成av无码| 精品久久久久久无码中文字幕一区 | 亚洲av无码精品网站| 免费A级毛片无码无遮挡内射 | 日韩人妻无码精品无码中文字幕| 亚洲区日韩区无码区| 在线精品自偷自拍无码中文| 国产在线无码精品电影网 | 久久亚洲精品成人无码| 亚洲AV无码一区二区乱子伦| 国产AV无码专区亚洲AV琪琪| 无码精品久久久久久人妻中字| 国产精品无码亚洲精品2021| 久久午夜无码鲁丝片秋霞| 国产成人午夜无码电影在线观看 | 精品无码一区二区三区爱欲九九 | 亚洲精品无码99在线观看| 精品无码人妻一区二区三区| 日韩精品无码人成视频手机| 18禁成年无码免费网站无遮挡| 无码国产精品一区二区免费虚拟VR | 免费无码又爽又黄又刺激网站| 无码精品国产dvd在线观看9久 | 影院无码人妻精品一区二区| 少妇久久久久久人妻无码| 亚洲av永久无码嘿嘿嘿| 久久国产亚洲精品无码 | 日韩精品无码一区二区三区AV| 无码人妻aⅴ一区二区三区有奶水| av无码免费一区二区三区| 日韩精品人妻系列无码专区| 国产白丝无码免费视频| 亚洲中文字幕无码久久综合网| 中文字幕无码第1页| 亚洲AV无码乱码国产麻豆| 亚洲色中文字幕无码AV| 中文字字幕在线中文无码| 亚洲爆乳无码专区|