From 84c97fb106b3449ec371c8c9c53a208efb46ff5d Mon Sep 17 00:00:00 2001 From: oupson Date: Wed, 12 Jun 2019 11:32:24 +0200 Subject: [PATCH] Add java activity --- .idea/caches/build_file_checksums.ser | Bin 596 -> 596 bytes .idea/misc.xml | 14 ++++- apng_library/build.gradle | 2 +- .../src/main/java/oupson/apng/ApngAnimator.kt | 18 ++++--- .../oupson/apng/CustomAnimationDrawable.kt | 12 ++--- app-test/src/main/AndroidManifest.xml | 48 ++++++++++-------- .../java/oupson/apngcreator/JavaActivity.java | 30 +++++++++++ .../java/oupson/apngcreator/MainActivity.kt | 5 +- .../src/main/res/layout/activity_java.xml | 16 ++++++ app-test/src/main/res/menu/main_menu.xml | 5 +- build.gradle | 1 - 11 files changed, 109 insertions(+), 42 deletions(-) create mode 100644 app-test/src/main/java/oupson/apngcreator/JavaActivity.java create mode 100644 app-test/src/main/res/layout/activity_java.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index f4a48859bf2ee49e6e937a6eee4a66886cfd521a..56351a400891201292a8a924b6b4ccde85ffac18 100644 GIT binary patch delta 56 zcmV-80LTB-1k?nOm;_4b7^{(-pAh=j1>Sc_uU}t>&VKc9y|9x@0VWVMAN~IP?=t1G OdDf7$F8qs=fdSJbI30Tc delta 56 zcmV-80LTB-1k?nOm;^`NxK@#zpAh%qq9Po68^wHA5IwjtiDi>Z0VWXGL3SDyxR>>e O`e^@%C~?t~fdSLcOc~Mu diff --git a/.idea/misc.xml b/.idea/misc.xml index eb655f9..e503b31 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,11 +1,15 @@ + + diff --git a/apng_library/build.gradle b/apng_library/build.gradle index da72c31..f1c4af7 100644 --- a/apng_library/build.gradle +++ b/apng_library/build.gradle @@ -37,4 +37,4 @@ dependencies { } repositories { mavenCentral() -} +} \ No newline at end of file diff --git a/apng_library/src/main/java/oupson/apng/ApngAnimator.kt b/apng_library/src/main/java/oupson/apng/ApngAnimator.kt index 2bd3311..2377fe2 100644 --- a/apng_library/src/main/java/oupson/apng/ApngAnimator.kt +++ b/apng_library/src/main/java/oupson/apng/ApngAnimator.kt @@ -24,6 +24,7 @@ import java.net.URL * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(file: File, speed: Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { load(file, speed, apngAnimatorOptions) } @@ -35,6 +36,7 @@ fun ImageView.loadApng(file: File, speed: Float? = null, apngAnimatorOptions: Ap * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(uri : Uri, speed: Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { load(uri, speed, apngAnimatorOptions) } @@ -46,6 +48,7 @@ fun ImageView.loadApng(uri : Uri, speed: Float? = null, apngAnimatorOptions: Apn * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(url: URL, speed: Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { loadUrl(url, speed, apngAnimatorOptions) } @@ -57,6 +60,7 @@ fun ImageView.loadApng(url: URL, speed: Float? = null, apngAnimatorOptions: Apng * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(byteArray: ByteArray, speed: Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { load(byteArray, speed, apngAnimatorOptions) } @@ -68,6 +72,7 @@ fun ImageView.loadApng(byteArray: ByteArray, speed: Float? = null, apngAnimatorO * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(string: String, speed : Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { load(string, speed, apngAnimatorOptions) } @@ -79,6 +84,7 @@ fun ImageView.loadApng(string: String, speed : Float? = null, apngAnimatorOption * @return [ApngAnimator] The animator */ @Suppress("unused") +@JvmOverloads fun ImageView.loadApng(@RawRes res : Int, speed : Float? = null, apngAnimatorOptions: ApngAnimatorOptions? = null) = ApngAnimator(this.context).loadInto(this).apply { load(res, speed, apngAnimatorOptions) } @@ -109,7 +115,7 @@ class ApngAnimator(private val context: Context?) { private var activeAnimation: CustomAnimationDrawable? = null private var doOnLoaded : (ApngAnimator) -> Unit = {} - private var animationLoopListener : () -> Unit = {} + private var frameChangeLister: (index : Int) -> Unit? = {} private var duration : ArrayList? = null @@ -472,7 +478,7 @@ class ApngAnimator(private val context: Context?) { } activeAnimation = animResume imageView?.setImageDrawable(activeAnimation) - activeAnimation?.setOnAnimationLoopListener(animationLoopListener) + activeAnimation?.setOnFrameChangeListener(frameChangeLister) imageView?.invalidate() duration = dura break@frameLoop @@ -493,12 +499,12 @@ class ApngAnimator(private val context: Context?) { /** * Set animation loop listener - * @param animationLoopListener The animation loop listener. + * @param frameChangeListener The listener. */ - fun setOnAnimationLoopListener(animationLoopListener : () -> Unit) { + fun setOnFrameChangeLister(frameChangeListener : (index : Int) -> Unit?) { if (isApng) { - this.animationLoopListener = animationLoopListener - anim?.setOnAnimationLoopListener(animationLoopListener) + this.frameChangeLister = frameChangeListener + anim?.setOnFrameChangeListener(frameChangeListener) } } diff --git a/apng_library/src/main/java/oupson/apng/CustomAnimationDrawable.kt b/apng_library/src/main/java/oupson/apng/CustomAnimationDrawable.kt index 615838b..7552167 100644 --- a/apng_library/src/main/java/oupson/apng/CustomAnimationDrawable.kt +++ b/apng_library/src/main/java/oupson/apng/CustomAnimationDrawable.kt @@ -7,19 +7,15 @@ import android.graphics.drawable.AnimationDrawable * for the caller to listen for specific animation related events. */ class CustomAnimationDrawable : AnimationDrawable() { - private var onAnimationLoop : () -> Unit = {} + private var onFrameChangeListener : (index : Int) -> Unit? = {} - fun setOnAnimationLoopListener( f : () -> Unit) { - onAnimationLoop = f + fun setOnFrameChangeListener( f : (index : Int) -> Unit?) { + onFrameChangeListener = f } override fun selectDrawable(index: Int): Boolean { val drawableChanged = super.selectDrawable(index) - - if (index != 0 && index == numberOfFrames - 1) { - onAnimationLoop() - } - + onFrameChangeListener(index) return drawableChanged } } \ No newline at end of file diff --git a/app-test/src/main/AndroidManifest.xml b/app-test/src/main/AndroidManifest.xml index c2db422..8114000 100644 --- a/app-test/src/main/AndroidManifest.xml +++ b/app-test/src/main/AndroidManifest.xml @@ -1,41 +1,45 @@ + xmlns:tools="http://schemas.android.com/tools" + package="oupson.apngcreator"> - - + + + android:allowBackup="true" + android:hardwareAccelerated="false" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:largeHeap="true" + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + android:theme="@style/AppTheme"> + + - + - + + android:name=".Main2Activity" + android:label="APNG Viewer"> - + - - + + - + - + \ No newline at end of file diff --git a/app-test/src/main/java/oupson/apngcreator/JavaActivity.java b/app-test/src/main/java/oupson/apngcreator/JavaActivity.java new file mode 100644 index 0000000..dcb3894 --- /dev/null +++ b/app-test/src/main/java/oupson/apngcreator/JavaActivity.java @@ -0,0 +1,30 @@ +package oupson.apngcreator; + +import android.os.Bundle; +import android.util.Log; +import android.widget.ImageView; +import androidx.appcompat.app.AppCompatActivity; +import kotlin.Unit; +import oupson.apng.ApngAnimator; +import oupson.apng.ApngAnimatorKt; +public class JavaActivity extends AppCompatActivity { + static String TAG = "JavaActivity"; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_java); + String imageUrl = "https://metagif.files.wordpress.com/2015/01/bugbuckbunny.png"; + ImageView image = findViewById(R.id.javaImageView); + ApngAnimator a = ApngAnimatorKt.loadApng(image, imageUrl); + a.onLoaded((animator) -> { + animator.setOnFrameChangeLister((index) -> { + if (index == 0) { + Log.i(TAG, "Loop"); + } + return Unit.INSTANCE; + }); + return Unit.INSTANCE; + }); + + } +} diff --git a/app-test/src/main/java/oupson/apngcreator/MainActivity.kt b/app-test/src/main/java/oupson/apngcreator/MainActivity.kt index 9bf6098..46a49b4 100644 --- a/app-test/src/main/java/oupson/apngcreator/MainActivity.kt +++ b/app-test/src/main/java/oupson/apngcreator/MainActivity.kt @@ -52,6 +52,9 @@ class MainActivity : AppCompatActivity() { startActivity() finish() } + R.id.action_open_java_activity -> { + startActivity() + } } } }.lparams { @@ -115,7 +118,7 @@ class MainActivity : AppCompatActivity() { id = View.generateViewId() animator = this.loadApng(imageUrl).apply { onLoaded { - setOnAnimationLoopListener { + setOnFrameChangeLister { // Log.e("app-test", "onLoop") } } diff --git a/app-test/src/main/res/layout/activity_java.xml b/app-test/src/main/res/layout/activity_java.xml new file mode 100644 index 0000000..18aae38 --- /dev/null +++ b/app-test/src/main/res/layout/activity_java.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/app-test/src/main/res/menu/main_menu.xml b/app-test/src/main/res/menu/main_menu.xml index e2c5796..61f8830 100644 --- a/app-test/src/main/res/menu/main_menu.xml +++ b/app-test/src/main/res/menu/main_menu.xml @@ -3,5 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + app:showAsAction="never" /> + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8dc83dd..92bd48c 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,6 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.4.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }