summaryrefslogtreecommitdiffstats
path: root/framesequence/samples
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2014-04-15 18:04:58 -0700
committerChris Craik <ccraik@google.com>2014-04-15 18:29:21 -0700
commit3105099a73d4fea3408ea0cf6b358fff77dc8b67 (patch)
treee675f1be3e18ab10c6d85b4c9d1ba0aebafb23d6 /framesequence/samples
parent9d34bc31927f47e91ba85980d4d146593cbbe1a8 (diff)
downloadandroid_frameworks_ex-3105099a73d4fea3408ea0cf6b358fff77dc8b67.tar.gz
android_frameworks_ex-3105099a73d4fea3408ea0cf6b358fff77dc8b67.tar.bz2
android_frameworks_ex-3105099a73d4fea3408ea0cf6b358fff77dc8b67.zip
Add Bitmap reuse callbacks to FrameSequenceDrawable
Also fixes decoding thread priority, and now correctly handles unscheduled swap events. Change-Id: I8397a390ff5d0cbbd5f2f07ab18973fb821c881d
Diffstat (limited to 'framesequence/samples')
-rw-r--r--framesequence/samples/RastermillSamples/src/com/android/rastermill/samples/AnimatedGifTest.java84
1 files changed, 65 insertions, 19 deletions
diff --git a/framesequence/samples/RastermillSamples/src/com/android/rastermill/samples/AnimatedGifTest.java b/framesequence/samples/RastermillSamples/src/com/android/rastermill/samples/AnimatedGifTest.java
index ea593dc..71f35e6 100644
--- a/framesequence/samples/RastermillSamples/src/com/android/rastermill/samples/AnimatedGifTest.java
+++ b/framesequence/samples/RastermillSamples/src/com/android/rastermill/samples/AnimatedGifTest.java
@@ -16,6 +16,7 @@
package com.android.rastermill.samples;
import android.app.Activity;
+import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.rastermill.FrameSequence;
import android.support.rastermill.FrameSequenceDrawable;
@@ -24,51 +25,96 @@ import android.widget.ImageView;
import android.widget.Toast;
import java.io.InputStream;
+import java.util.HashSet;
public class AnimatedGifTest extends Activity {
+ FrameSequenceDrawable mDrawable;
+
+ // This provider is entirely unnecessary, just here to validate the acquire/release process
+ private class CheckingProvider implements FrameSequenceDrawable.BitmapProvider {
+ HashSet<Bitmap> mBitmaps = new HashSet<Bitmap>();
+ @Override
+ public Bitmap acquireBitmap(int minWidth, int minHeight) {
+ Bitmap bitmap =
+ Bitmap.createBitmap(minWidth + 1, minHeight + 4, Bitmap.Config.ARGB_8888);
+ mBitmaps.add(bitmap);
+ return bitmap;
+ }
+
+ @Override
+ public void releaseBitmap(Bitmap bitmap) {
+ if (!mBitmaps.contains(bitmap)) throw new IllegalStateException();
+ mBitmaps.remove(bitmap);
+ bitmap.recycle();
+ }
+
+ public boolean isEmpty() {
+ return mBitmaps.isEmpty();
+ }
+ }
+
+ final CheckingProvider mProvider = new CheckingProvider();
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic_test_activity);
- ImageView imageView = (ImageView) findViewById(R.id.imageview);
-
- InputStream is = getResources().openRawResource(R.raw.animated);
-
- FrameSequence fs = FrameSequence.decodeStream(is);
- final FrameSequenceDrawable drawable = new FrameSequenceDrawable(fs);
- drawable.setOnFinishedListener(new FrameSequenceDrawable.OnFinishedListener() {
- @Override
- public void onFinished(FrameSequenceDrawable drawable) {
- Toast.makeText(getApplicationContext(),
- "THE ANIMATION HAS FINISHED", Toast.LENGTH_SHORT).show();
- }
- });
- imageView.setImageDrawable(drawable);
-
findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- drawable.start();
+ mDrawable.start();
}
});
findViewById(R.id.stop).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- drawable.stop();
+ mDrawable.stop();
}
});
findViewById(R.id.vis).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- drawable.setVisible(true, true);
+ mDrawable.setVisible(true, true);
}
});
findViewById(R.id.invis).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- drawable.setVisible(false, true);
+ mDrawable.setVisible(false, true);
}
});
}
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ ImageView imageView = (ImageView) findViewById(R.id.imageview);
+ InputStream is = getResources().openRawResource(R.raw.animated);
+
+ FrameSequence fs = FrameSequence.decodeStream(is);
+ mDrawable = new FrameSequenceDrawable(fs, mProvider);
+ mDrawable.setOnFinishedListener(new FrameSequenceDrawable.OnFinishedListener() {
+ @Override
+ public void onFinished(FrameSequenceDrawable drawable) {
+ Toast.makeText(getApplicationContext(),
+ "THE ANIMATION HAS FINISHED", Toast.LENGTH_SHORT).show();
+ }
+ });
+ imageView.setImageDrawable(mDrawable);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ ImageView imageView = (ImageView) findViewById(R.id.imageview);
+
+ mDrawable.recycle(mProvider);
+ if (!mProvider.isEmpty()) throw new IllegalStateException("All bitmaps not recycled");
+
+ mDrawable = null;
+ imageView.setImageDrawable(null);
+
+ }
}