ViewAnimationUtils是Android5.0出來的API嗅回。其作用就是可以使控件能夠呈現(xiàn)水波一樣展開。先上一張效果圖:
PS:圖是網(wǎng)上找的包归,不會做gif圖案淋。
具體的方法如下:
public static Animator createCircularReveal(View view,
int centerX, int centerY, float startRadius, float endRadius) {
return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);
}
- 參數(shù)1:view是你需要這個效果的控件
- 參數(shù)2:centerX動畫中心x軸坐標(biāo)
- 參數(shù)3:centerY動畫中心y軸坐標(biāo)
- 參數(shù)4:startRadius動畫開始的半徑
- 參數(shù)5:endRadius動畫結(jié)束的半徑
我的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="默認(rèn)顯示"/>
</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){ //如果已經(jīng)顯示了
/*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);//動畫持續(xù)的時長
circularReveal.setStartDelay(1000);//動畫延時多長時間開始
circularReveal.start();//開始動畫
circularReveal.addListener(new AnimatorListenerAdapter() {
//動畫結(jié)束的監(jiān)聽
@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);//動畫持續(xù)的時長
// circularReveal.setInterpolator(new LinearOutSlowInInterpolator());//out到in
img.setVisibility(View.VISIBLE);
circularReveal.start();
}
}else{
img.setVisibility(img.isShown()?View.GONE:View.VISIBLE);
}
- 首先,你得是Android5.0及以上版本才有這個效果
- 獲取控件的寬,高友驮,取大的為半徑(按你自己的想法來就可以了)
- 設(shè)置動畫的數(shù)據(jù)漂羊,也就是上面說到的5個參數(shù)
- 設(shè)置動畫的持續(xù)時間,動畫監(jiān)聽等
這里需要說明的是卸留,如果你的布局文件里面imageview設(shè)置的不占位隱藏走越,也就是gone,你第一次獲取imageview的長寬的時候耻瑟,獲取不到旨指,會是0。
- 這里不一定非要按imageview的長寬來喳整,后面的四個參數(shù)谆构,都是你自己隨便設(shè)置的,設(shè)置其他的數(shù)據(jù)也是一樣的框都,會得到不一樣的效果搬素。比方說設(shè)置動畫中心X軸坐標(biāo),Y軸坐標(biāo)為(0,0)魏保,那么動畫就是從左上角開始顯示熬尺,一直到全都顯示出來。
- 然后就是半徑谓罗,如果你沒有設(shè)置圖片長寬中大的一個數(shù)粱哼,比方說設(shè)置小一點的,我設(shè)置100像素檩咱,動畫結(jié)束后揭措,顯示的圖片就是以你設(shè)置的圓心開始,半徑為100像素的一個圓形圖片刻蚯。
- 再就是動畫的監(jiān)聽绊含,動畫結(jié)束的時候的監(jiān)聽。動畫結(jié)束你要顯示圖片炊汹,還是隱藏圖片艺挪,在動畫結(jié)束的時候設(shè)置。
- 就這樣吧兵扬,結(jié)束