android 在使用ViewAnimationUtils.createCircularReveal()沒法兼容低版本的狀況下,另行實現圓形scale動畫

ViewAnimationUtils.createCircularReveal()的簡介:java

      ViewAnimationUtils.createCircularReveal()是安卓5.0才引入的,快速實現圓形縮放動畫的api,效果以下圖所示:android

 

       若是要在你的程序中使用它,必需要設置最低的 api 版本是 21,往下版本的,在運行程序的時候就會拋出 .createCircularReveal() not found
git

異常。其源碼以下:github

1 public static Animator createCircularReveal(View view,int centerX,  int centerY, float startRadius, float endRadius) {
2     return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);
3 }

第一個參數view:是你要進行圓形縮放的 view;api

第二和第三個參數:分別是開始縮放點的 x 和 y 座標;app

第四和第五:分別是開始的半徑和結束的半徑。ide

 

在兼容低版本下模仿實現上述效果:佈局

      實現思路:動畫

           1-》實現圓形,使用 xml 自定義背景,實現圓形,再設置到 view ;ui

           2-》使用傳統的 scaleX 和 scaleY ,在所要縮放的 view 裏同時實現縮放。

shape 代碼:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:shape="oval"
 5     android:useLevel="false">
 6     <!--oval是 shape的屬性之一,意思是 橢圓-->
 7     <!--solid 是shape 的孩子之一,做用是實現填充-->
 8     <solid android:color="#ff49fdfa"/>
 9     <!--size 也是shape 的孩子之一,做用是實現 長寬限制-->
10     <size
11         android:width="300dp"
12         android:height="300dp" />
13 </shape>

 

佈局代碼:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6 
 7     <LinearLayout
 8         android:id="@+id/linearTestScale"
 9         android:orientation="vertical"
10         android:layout_width="10dp"
11         android:background="@drawable/a"
12         android:layout_height="10dp">
13 
14         </LinearLayout>
15     <Button
16         android:id="@+id/btnTestScale"
17         android:text="xxx"
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         />
21 </LinearLayout>

 

java代碼:

 1 package com.LGH.ui.activity;
 2 
 3 import android.animation.AnimatorSet;
 4 import android.animation.ObjectAnimator;
 5 import android.app.Activity;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.animation.LinearInterpolator;
 9 import android.widget.Button;
10 import android.widget.LinearLayout;
11 
12 import io.github.froger.instamaterial.R;
13 
14 /**
15  * Created by Administrator on 2015/6/29.
16  */
17 public class test extends Activity{
18 
19     Button btnTestScale;
20     LinearLayout linearTestScale;
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.test);
26         btnTestScale = (Button) findViewById(R.id.a);
27         linearTestScale = (LinearLayout) findViewById(R.id.aaa);
28         btnTestScale.setOnClickListener(new View.OnClickListener() {
29             @Override
30             public void onClick(View v) {
31                 ObjectAnimator revealAnimator = ObjectAnimator.ofFloat( //縮放X 軸的
32                         linearTestScale, "scaleX", 0, 200);
33                 ObjectAnimator revealAnimator1 = ObjectAnimator.ofFloat(//縮放Y 軸的
34                         linearTestScale, "scaleY", 0, 200);
35                 AnimatorSet set = new AnimatorSet();
36                 set.setDuration(500);//設置播放時間
37                 set.setInterpolator(new LinearInterpolator());//設置播放模式,這裏是日常模式
38                 set.playTogether(revealAnimator, revealAnimator1);//設置一塊兒播放
39                 set.start();
40             }
41         });
42     }
43 }

 

 

 

相關文章
相關標籤/搜索