Android如何使用圓形揭露動(dòng)畫(huà)巧妙地隱藏或顯示View詳解
1.引言
在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到需要顯示或隱藏View視圖的情況,如果在隱藏或顯示View的過(guò)程中加上動(dòng)畫(huà),能讓交互更加的友好和動(dòng)感,本文將介紹如何使用圓形揭露動(dòng)畫(huà)巧妙地隱藏或顯示View。
2.圓形揭露動(dòng)畫(huà)簡(jiǎn)介
圓形揭露動(dòng)畫(huà)是動(dòng)畫(huà)的一種,是由ViewAnimationUtils類提供的,調(diào)用ViewAnimationUtils.createCircularReveal()方法可以創(chuàng)建圓形揭露動(dòng)畫(huà),使用此動(dòng)畫(huà)要求API級(jí)別為21及以上版本,createCircularReveal()方法的參數(shù)如下:
//view:使用圓形動(dòng)畫(huà)的視圖 //centerX:裁剪圓形的中心的X坐標(biāo),這個(gè)中心是指相對(duì)于視圖本身 //centerY:裁剪圓形的中心的Y坐標(biāo),這個(gè)中心是指相對(duì)于視圖本身 //startRadius:圓形的起始半徑 //endRadius:圓形的結(jié)束半徑 public static Animator createCircularReveal(View view,int centerX, int centerY, float startRadius, float endRadius)
3.使用圓形揭露動(dòng)畫(huà)隱藏或顯示View
3.1 簡(jiǎn)易布局
簡(jiǎn)易布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_hide_or_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隱藏或顯示"
android:textColor="@color/black"
android:textSize="18sp" />
<ImageView
android:id="@+id/imageView"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="50dp"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>3.2 使用圓形揭露動(dòng)畫(huà)隱藏View
首先要計(jì)算得出View相對(duì)于自身的中心點(diǎn)的X坐標(biāo)和Y坐標(biāo),然后調(diào)用Math.hypot()方法計(jì)算得出圓形的半徑,接著調(diào)用ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, circleRadius, 0f)創(chuàng)建圓形揭露動(dòng)畫(huà),增加動(dòng)畫(huà)執(zhí)行的Listener,在動(dòng)畫(huà)執(zhí)行結(jié)束后調(diào)用imageView.setVisibility(View.GONE),最后啟動(dòng)動(dòng)畫(huà),示例如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int width = imageView.getWidth();
int height = imageView.getHeight();
int ivXCenter = width/2;
int ivYCenter = height/2;
float circleRadius = (float) Math.hypot(ivXCenter, ivYCenter);
Animator circularReveal = ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, circleRadius, 0f);
circularReveal.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
imageView.setVisibility(View.GONE);
isVisible = false;
}
});
circularReveal.start();
}else {
imageView.setVisibility(View.GONE);
isVisible = false;
}3.3 使用圓形揭露動(dòng)畫(huà)顯示View
使用圓形揭露動(dòng)畫(huà)顯示View,先計(jì)算得出View相對(duì)于自身的中心點(diǎn)的X坐標(biāo)和Y坐標(biāo),然后算出圓形的半徑,接著創(chuàng)建圓形揭露動(dòng)畫(huà),此時(shí)的起始半徑是0f,結(jié)束半徑是圓形的半徑,調(diào)用imageView.setVisibility(View.VISIBLE),最后啟動(dòng)動(dòng)畫(huà),示例如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int width = imageView.getWidth();
int height = imageView.getHeight();
int ivXCenter = width/2;
int ivYCenter = height/2;
float circleRadius = (float) Math.hypot(ivXCenter, ivYCenter);
Animator circularReveal = ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, 0f, circleRadius);
imageView.setVisibility(View.VISIBLE);
isVisible = true;
circularReveal.start();
}else {
imageView.setVisibility(View.VISIBLE);
isVisible = true;
}4.總結(jié)
使用圓形揭露動(dòng)畫(huà)隱藏或顯示View,主要是計(jì)算出View相對(duì)于自身的中心點(diǎn)的X坐標(biāo)和Y坐標(biāo),并計(jì)算出圓形半徑,在調(diào)用ViewAnimationUtils.createCircularReveal()方法創(chuàng)建的時(shí)候要注意起始半徑和結(jié)束半徑的填寫(xiě),隱藏View的時(shí)候在動(dòng)畫(huà)執(zhí)行完畢后setVisibility()方法隱藏,顯示View的時(shí)候,在動(dòng)畫(huà)啟動(dòng)前調(diào)用setVisibility()方法顯示。
到此這篇關(guān)于Android如何使用圓形揭露動(dòng)畫(huà)巧妙地隱藏或顯示View的文章就介紹到這了,更多相關(guān)Android隱藏或顯示View內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android TV開(kāi)發(fā):實(shí)現(xiàn)3D仿Gallery效果的實(shí)例代碼
這篇文章主要介紹了Android TV開(kāi)發(fā):實(shí)現(xiàn)3D仿Gallery效果的實(shí)例代碼,效果:滾動(dòng)翻頁(yè)+ 頁(yè)面點(diǎn)擊+頁(yè)碼指示器+焦點(diǎn)控制,主要為了移植到電視上做了按鍵事件和焦點(diǎn)控制。2018-05-05
Android Studio開(kāi)發(fā)之 JNI 篇的簡(jiǎn)單示例
本篇文章主要介紹了Android Studio開(kāi)發(fā)之 JNI 篇的簡(jiǎn)單示例,它提供了若干的API實(shí)現(xiàn)了Java和其他語(yǔ)言的通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android監(jiān)聽(tīng)Home鍵和Back鍵的區(qū)別介紹
這篇文章主要介紹了Android監(jiān)聽(tīng)Home鍵和Back鍵的區(qū)別介紹,本文還同時(shí)給出了Home鍵監(jiān)聽(tīng)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-06-06
Android實(shí)現(xiàn)信號(hào)強(qiáng)度監(jiān)聽(tīng)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)信號(hào)強(qiáng)度監(jiān)聽(tīng)的方法,是Android手機(jī)中很常見(jiàn)的一個(gè)實(shí)用功能,需要的朋友可以參考下2014-08-08
基于Retrofit2+RxJava2實(shí)現(xiàn)Android App自動(dòng)更新
這篇文章主要為大家詳細(xì)介紹了基于Retrofit2+RxJava2實(shí)現(xiàn)Android App自動(dòng)更新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹
這篇文章主要介紹了Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼及實(shí)現(xiàn)微信搖一搖的思路,需要的朋友可以參考下2016-11-11
Android自定義控件實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
cocos2d-2.0-x-2.0.3 交叉編譯到android報(bào)錯(cuò)解決
我用的是cocos2d-2.0-x-2.0.3 之前弄了一天也沒(méi)成功 今天來(lái)了下載了最新的ndk8 更新了sdk 又重新是了一遍 居然成功了,不知道是工具的版本問(wèn)題還是哪一步出錯(cuò)誤了,在這里詳細(xì)的整理一下,感興趣的朋友可以了解下2013-01-01
詳解Flutter中網(wǎng)絡(luò)框架dio的二次封裝
其實(shí)dio框架已經(jīng)封裝的很好了,但是在實(shí)戰(zhàn)項(xiàng)目中,為了項(xiàng)目可以統(tǒng)一管理,還是需要對(duì)dio框架進(jìn)行二次封裝。本文將詳細(xì)講解一下dio如何二次封裝,需要的可以參考一下2022-04-04

