diff options
author | Trumeet <liangyuteng12345@gmail.com> | 2017-08-02 17:54:39 +0800 |
---|---|---|
committer | Trumeet <liangyuteng12345@gmail.com> | 2017-08-02 17:54:39 +0800 |
commit | 38f245dc0309712b4b5f2a044b7a7304215c65f4 (patch) | |
tree | d3cc5b44126406da20f0903c91d9e7ec03e57f1e | |
parent | ad9fdbdfcc37220779d64c3ac7547ec3ceff6958 (diff) | |
download | Animations-38f245dc0309712b4b5f2a044b7a7304215c65f4.tar Animations-38f245dc0309712b4b5f2a044b7a7304215c65f4.tar.gz Animations-38f245dc0309712b4b5f2a044b7a7304215c65f4.tar.bz2 Animations-38f245dc0309712b4b5f2a044b7a7304215c65f4.zip |
refactor: use drawable instead of ImageView
7 files changed, 99 insertions, 100 deletions
diff --git a/.idea/misc.xml b/.idea/misc.xml index 17c28e9..4aef399 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ </value> </option> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8 (3)" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8 (3)" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> @@ -31,24 +31,30 @@ Beautiful animations and views from AOSP # Usage -* FingerprintAnimationImageView +## Fingerprint isolated animation - 帶有指紋識別動畫的ImageView。 + **設置 -> 安全性 -> 指紋 -> 新增指紋** 中間的指紋圖標動畫 - **設置 -> 安全性 -> 指紋 -> 新增指紋** + 來自 [platform_packages_apps_settings/FingerprintEnrollEnrolling.java](https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java) - ![FingerprintAnimationImageView](https://raw.githubusercontent.com/AndroidSnippet/Animations/master/art/FingerprintAnimationImageView_0.PNG) + ![animation](https://raw.githubusercontent.com/AndroidSnippet/Animations/master/art/FingerprintAnimationImageView_0.PNG) - ```xml - <top.trumeet.snippet.aospanimation.library.FingerprintAnimationImageView + ```xml + <ImageView android:id="@+id/fingerprint_animator" android:layout_width="@dimen/fingerprint_animation_size" - android:layout_height="@dimen/fingerprint_animation_size" /> - ``` + android:layout_height="@dimen/fingerprint_animation_size" + android:background="@drawable/fp_illustration_enrollment" + android:backgroundTint="@color/fingerprint_indicator_background_resting" /> + ``` - 開始動畫: `startIconAnimation()` + LoopAnimatedVectorDrawableCompat mFingerprintAnimator = new LoopAnimatedVectorDrawableCompat(AnimatedVectorDrawableCompat.create(this, + R.drawable.enrollment_fingerprint_isolated_animation)); + fingerprintIsolated.setImageDrawable(mFingerprintAnimator.getDrawable()); - 停止動畫: `stopIconAnimation()` + 開始動畫: `mFingerprintAnimator.startIconAnimation()` + + 停止動畫: `mFingerprintAnimator.stopIconAnimation()` # Licenses 使用本項目請確保您遵守 `Apache License 2.0` diff --git a/app/src/main/java/top/trumeet/snippet/aospanimation/MainActivity.java b/app/src/main/java/top/trumeet/snippet/aospanimation/MainActivity.java index 341fda7..661b2da 100644 --- a/app/src/main/java/top/trumeet/snippet/aospanimation/MainActivity.java +++ b/app/src/main/java/top/trumeet/snippet/aospanimation/MainActivity.java @@ -2,10 +2,12 @@ package top.trumeet.snippet.aospanimation; import android.app.Activity; import android.os.Bundle; +import android.support.graphics.drawable.AnimatedVectorDrawableCompat; import android.view.Menu; import android.view.MenuItem; +import android.widget.ImageView; -import top.trumeet.snippet.aospanimation.library.FingerprintAnimationImageView; +import top.trumeet.snippet.aospanimation.library.drawables.LoopAnimatedVectorDrawableCompat; /** * Created by Trumeet on 2017/8/2. @@ -13,23 +15,26 @@ import top.trumeet.snippet.aospanimation.library.FingerprintAnimationImageView; */ public class MainActivity extends Activity { - private FingerprintAnimationImageView mFingerprintAnimator; + private LoopAnimatedVectorDrawableCompat mFingerprintAnimator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - mFingerprintAnimator = findViewById(R.id.fingerprint_animator); + ImageView fingerprintIsolated = findViewById(R.id.fingerprint_animator); + mFingerprintAnimator = new LoopAnimatedVectorDrawableCompat(AnimatedVectorDrawableCompat.create(this, + R.drawable.enrollment_fingerprint_isolated_animation)); + fingerprintIsolated.setImageDrawable(mFingerprintAnimator.getDrawable()); } @Override public void onStart () { super.onStart(); - mFingerprintAnimator.startIconAnimation(); + mFingerprintAnimator.startAnimation(); } @Override public void onStop () { - mFingerprintAnimator.stopIconAnimation(); + mFingerprintAnimator.stopAnimation(); super.onStop(); } @@ -46,10 +51,10 @@ public class MainActivity extends Activity { public boolean onOptionsItemSelected (MenuItem item) { switch (item.getItemId()) { case 0 : - mFingerprintAnimator.startIconAnimation(); + mFingerprintAnimator.startAnimation(); return true; case 1 : - mFingerprintAnimator.stopIconAnimation(); + mFingerprintAnimator.stopAnimation(); return true; } return false; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5b8e920..1cf0dc6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,9 +7,11 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> - <top.trumeet.snippet.aospanimation.library.FingerprintAnimationImageView + <ImageView android:id="@+id/fingerprint_animator" android:layout_width="@dimen/fingerprint_animation_size" - android:layout_height="@dimen/fingerprint_animation_size" /> + android:layout_height="@dimen/fingerprint_animation_size" + android:background="@drawable/fp_illustration_enrollment" + android:backgroundTint="@color/fingerprint_indicator_background_resting" /> </LinearLayout> </ScrollView>
\ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index b73bf02..8d8d745 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -26,7 +26,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:animated-vector-drawable:26.0.0' + compile 'com.android.support:animated-vector-drawable:26.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2' diff --git a/library/src/main/java/top/trumeet/snippet/aospanimation/library/FingerprintAnimationImageView.java b/library/src/main/java/top/trumeet/snippet/aospanimation/library/FingerprintAnimationImageView.java deleted file mode 100644 index 0417e5a..0000000 --- a/library/src/main/java/top/trumeet/snippet/aospanimation/library/FingerprintAnimationImageView.java +++ /dev/null @@ -1,79 +0,0 @@ -package top.trumeet.snippet.aospanimation.library; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.drawable.Drawable; -import android.support.graphics.drawable.Animatable2Compat; -import android.support.graphics.drawable.AnimatedVectorDrawableCompat; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.util.AttributeSet; -import android.widget.ImageView; - -/** - * Created by Trumeet on 2017/8/2. - * @see <a href="https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java" /> - */ - -public class FingerprintAnimationImageView extends ImageView { - private AnimatedVectorDrawableCompat mIconAnimationDrawable; - private boolean mAnimationCancelled; - - public FingerprintAnimationImageView(Context context) { - super(context); - init(); - } - - public FingerprintAnimationImageView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public FingerprintAnimationImageView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private void init () { - Drawable background = getResources().getDrawable(R.drawable.fp_illustration_enrollment); - DrawableCompat.setTintList(background, ColorStateList.valueOf(getResources().getColor(R.color.fingerprint_indicator_background_resting))); - setBackgroundDrawable(background); - mIconAnimationDrawable = AnimatedVectorDrawableCompat.create(getContext(), - R.drawable.enrollment_fingerprint_isolated_animation); - setImageDrawable(mIconAnimationDrawable); - mIconAnimationDrawable.registerAnimationCallback(mIconAnimationCallback); - } - - private final Animatable2Compat.AnimationCallback mIconAnimationCallback = - new Animatable2Compat.AnimationCallback() { - @Override - public void onAnimationEnd(Drawable d) { - if (mAnimationCancelled) { - return; - } - - // Start animation after it has ended. - post(new Runnable() { - @Override - public void run() { - startIconAnimation(); - } - }); - } - }; - - /** - * Start animation - */ - public void startIconAnimation() { - mAnimationCancelled = false; - mIconAnimationDrawable.start(); - } - - /** - * Stop animation, do not forgot it in onStop - */ - public void stopIconAnimation() { - mAnimationCancelled = true; - mIconAnimationDrawable.stop(); - } -} diff --git a/library/src/main/java/top/trumeet/snippet/aospanimation/library/drawables/LoopAnimatedVectorDrawableCompat.java b/library/src/main/java/top/trumeet/snippet/aospanimation/library/drawables/LoopAnimatedVectorDrawableCompat.java new file mode 100644 index 0000000..7a45cc4 --- /dev/null +++ b/library/src/main/java/top/trumeet/snippet/aospanimation/library/drawables/LoopAnimatedVectorDrawableCompat.java @@ -0,0 +1,65 @@ +package top.trumeet.snippet.aospanimation.library.drawables; + +import android.graphics.drawable.Drawable; +import android.support.graphics.drawable.Animatable2Compat; +import android.support.graphics.drawable.AnimatedVectorDrawableCompat; + +/** + * Created by Trumeet on 2017/8/2. + * Wrap android.support.graphics.drawable.AnimatedVectorDrawableCompat, + * support loop + * @see AnimatedVectorDrawableCompat + */ + +public class LoopAnimatedVectorDrawableCompat { + private AnimatedVectorDrawableCompat mAnimator; + private boolean mAnimationCancelled; + + public LoopAnimatedVectorDrawableCompat (AnimatedVectorDrawableCompat animatedVectorDrawableCompat) { + this.mAnimator = animatedVectorDrawableCompat; + setLoopEnable(true); + } + + private final Animatable2Compat.AnimationCallback mIconAnimationCallback = + new Animatable2Compat.AnimationCallback() { + @Override + public void onAnimationEnd(Drawable d) { + if (mAnimationCancelled) { + return; + } + + startAnimation(); + } + }; + + /** + * Start animation + */ + public void startAnimation() { + mAnimationCancelled = false; + mAnimator.start(); + } + + /** + * Stop animation, do not forgot it in onStop + */ + public void stopAnimation() { + mAnimationCancelled = true; + mAnimator.stop(); + } + + /** + * Enable or Disable loop + * @param enable enable loop + */ + public void setLoopEnable (boolean enable) { + if (enable) + mAnimator.registerAnimationCallback(mIconAnimationCallback); + else + mAnimator.unregisterAnimationCallback(mIconAnimationCallback); + } + + public AnimatedVectorDrawableCompat getDrawable () { + return mAnimator; + } +} |