揭露動畫—ViewAnimationUtils.createCircularReveal
ViewAnimationUtils是Android5.0出來的API。其作用就是可以使控制元件能夠呈現水波一樣展開。先上一張效果圖:
PS:圖是網上找的,不會做gif圖。
具體的方法如下:
public static Animator createCircularReveal(View view,
int centerX, int centerY, float startRadius, float endRadius) {
return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);
}
引數1:view是你需要這個效果的控制元件
引數2:centerX動畫中心x軸座標
引數3:centerY動畫中心y軸座標
引數4:startRadius動畫開始的半徑
引數5:endRadius動畫結束的半徑
我的demo佈局如下,很簡單:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="揭露動畫效果"/>
<Button
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="預設顯示"/>
</LinearLayout>
<ImageView
android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@mipmap/uvurn"
android:visibility="invisible"/>
佈局就是兩個按鈕,一個是啟動動畫的按鈕,一個是普通的顯示、隱藏的按鈕,還有一個ImageView就是動畫的載體。
java的動畫程式碼如下:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
int measuredWidth = img.getMeasuredWidth();
int measuredHeight = img.getMeasuredHeight();
int maxRadius = Math.max(measuredWidth, measuredHeight);
Animator circularReveal = null;
if(img.getVisibility()==View.VISIBLE){ //如果已經顯示了
/*circularReveal = ViewAnimationUtils.createCircularReveal
(img, measuredWidth/2, measuredHeight/2, maxRadius, 0);*/
/*circularReveal = ViewAnimationUtils.createCircularReveal
(img, 0, 0, maxRadius, 0);*/
circularReveal = ViewAnimationUtils.createCircularReveal
(img, measuredWidth, measuredHeight, maxRadius, 0);
circularReveal.setDuration(1000);
circularReveal.setStartDelay(1000);
circularReveal.start();
circularReveal.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
img.setVisibility(View.GONE);
}
});
}else{
circularReveal = ViewAnimationUtils.createCircularReveal
(img, measuredWidth/2, measuredHeight/2, 0, maxRadius);
circularReveal.setDuration(1000);
// circularReveal.setInterpolator(new LinearOutSlowInInterpolator());//out到in
img.setVisibility(View.VISIBLE);
circularReveal.start();
}
}else{
img.setVisibility(img.isShown()?View.GONE:View.VISIBLE);
}
首先,你得是Android5.0及以上版本才有這個效果
獲取控制元件的寬,高,取大的為半徑(按你自己的想法來就可以了)
設定動畫的資料,也就是上面說到的5個引數
設定動畫的持續時間,動畫監聽等
這裡需要說明的是,如果你的佈局檔案裡面imageview設定的不佔位隱藏,也就是gone,你第一次獲取imageview的長寬的時候,獲取不到,會是0。
這裡不一定非要按imageview的長寬來,後面的四個引數,都是你自己隨便設定的,設定其他的資料也是一樣的,會得到不一樣的效果。比方說設定動畫中心X軸座標,Y軸座標為(0,0),那麼動畫就是從左上角開始顯示,一直到全都顯示出來。
然後就是半徑,如果你沒有設定圖片長寬中大的一個數,比方說設定小一點的,我設定100畫素,動畫結束後,顯示的圖片就是以你設定的圓心開始,半徑為100畫素的一個圓形圖片。
再就是動畫的監聽,動畫結束的時候的監聽。動畫結束你要顯示圖片,還是隱藏圖片,在動畫結束的時候設定。
相關文章
- 揭露Windows中各種不Ň(轉)Windows
- Wired:揭露新iPhone 12 Pro的原始成本iPhone
- iOS 揭露Block的內部實現原理iOSBloC
- Gartner:揭露大資料5大誤區大資料
- 安全公司揭露in-session網路釣魚新手法Session
- 網友揭露抖音主播使用者註冊APP套路APP
- 【專訪 PHP 之父】PHP7 效能翻倍關鍵大揭露PHP
- 揭露 FileSystem 引起的線上 JVM 記憶體溢位問題JVM記憶體溢位
- 研究:比特幣揭露央行貨幣操縱和資本管制比特幣
- 免費才最貴:揭露「免費」Windows 10 的真實成本Windows
- View動畫、幀動畫View動畫
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- 蔡康永揭露職場真相:所有的工作,其實你都不會喜歡
- 谷歌揭露兩個朝鮮黑客組織的網路攻擊活動谷歌黑客
- iOS動畫-按鈕動畫iOS動畫
- iOS 動畫之Spring動畫、Block動畫、GIF圖iOS動畫SpringBloC
- 【Android 動畫】動畫詳解之屬性動畫(三)Android動畫
- 【Android 動畫】動畫詳解之補間動畫(一)Android動畫
- 【Android 動畫】動畫詳解之屬性動畫(五)Android動畫
- 《Flutter 動畫系列》組合動畫Flutter動畫
- CSS動畫篇之404動畫CSS動畫
- 抽獎動畫 - 播放svga動畫動畫SVG
- iOS 動畫-定時器動畫iOS動畫定時器
- jQuery動畫—自定義動畫animate()jQuery動畫
- Epic Games VS 蘋果 | 揭露微軟 xCloud 上架 App Store 的諸多困難GAM蘋果微軟CloudAPP
- 揭露共享wifi小程式搭建新騙局套路!幾個注意事項留意!WiFi
- Java 給PPT新增動畫效果(預設動畫/自定義動畫)Java動畫
- Flutter——動畫基礎(補間動畫)Flutter動畫
- Android 動畫之屬性動畫Android動畫
- JS動畫效果——多物體動畫JS動畫
- jQuery 動畫效果 與 動畫佇列jQuery動畫佇列
- iOS動畫實戰之Lottie動畫iOS動畫
- css3常用動畫+動畫庫CSSS3動畫
- 動畫篇-從UIView動畫說起動畫UIView
- iOS動畫專題·UIView二維形變動畫與CAAnimation核心動畫(transform動畫,基礎,關鍵幀,組動畫,路徑動畫,貝塞爾曲線)iOS動畫UIViewORM
- 谷歌揭露14個iPhone漏洞,黑客持續竊取資料長達2年谷歌iPhone黑客
- 暨南大學4學生研發反PUA遊戲 揭露“五步陷阱法”遊戲
- ASP.NET Core 實戰:基於 Jwt Token 的許可權控制全揭露ASP.NETJWT