diff options
author | Chris Craik <ccraik@google.com> | 2014-04-15 18:04:58 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2014-04-15 18:29:21 -0700 |
commit | 3105099a73d4fea3408ea0cf6b358fff77dc8b67 (patch) | |
tree | e675f1be3e18ab10c6d85b4c9d1ba0aebafb23d6 /framesequence/samples | |
parent | 9d34bc31927f47e91ba85980d4d146593cbbe1a8 (diff) | |
download | android_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.java | 84 |
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); + + } } |