80,351
社区成员
发帖
与我相关
我的任务
分享
package flipper.animation;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class FlipperAnimationActivity extends Activity
{
private ViewFlipper mFlipper;
private Button mButton;
private boolean mIsButtonDown = false;
private Bitmap mBitmap1 = null;
private Bitmap mBitmap2 = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mFlipper = (ViewFlipper) findViewById(R.id.flipper);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new ButtonListener());
mFlipper.addView(addText("1", 0), 0);
mFlipper.setDisplayedChild(0);
}
private View addText(String text, int index)
{
ImageView view = new ImageView(this);
textAttribute(view, index);
return view;
}
private void textAttribute(ImageView textView, int index)
{
if (index == 0)
{
textView.setBackgroundColor(Color.parseColor("#FF00FF00"));
mBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.clock);
textView.setImageBitmap(mBitmap1);
}
else if (index == 1)
{
textView.setBackgroundColor(Color.parseColor("#FF0000FF"));
mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
textView.setImageBitmap(mBitmap2);
}
}
class ButtonListener implements OnClickListener
{
private RotateAnimation rotate = new RotateAnimation(0f, 360f);
private ScaleAnimation scale = new ScaleAnimation(0f, 1f, 0f, 1f, 0.5f, 0.5f);
public void onClick(View v)
{
if (!mIsButtonDown)
{
rotate.setDuration(3000);
scale.setDuration(1000);
// mFlipper.setInAnimation(rotate);
// mFlipper.setOutAnimation(scale);
mFlipper.addView(addText("2", 1), 0);
Log.e("----", "flipper size: " + mFlipper.getChildCount());
mFlipper.setDisplayedChild(0);
mFlipper.removeViewAt(1);
Log.e("----", "flipper size: " + mFlipper.getChildCount());
mIsButtonDown = true;
scale.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation)
{
}
public void onAnimationRepeat(Animation animation)
{
}
public void onAnimationEnd(Animation animation)
{
Log.e("---", "recycle: " + mBitmap1.isRecycled());
// 在此动画完成时释放,报RuntimeException: Canvas: trying to use a recycled bitmap
// 没有添加动画情况下,正常
mBitmap2.recycle();
Log.e("---", "recycle: " + mBitmap1.isRecycled());
}
});
Log.e("---", "recycle: " + mBitmap1.isRecycled());
// 添加动画后就报RuntimeException: Canvas: trying to use a recycled bitmap
// 没有添加动画情况下,正常
mBitmap1.recycle();
Log.e("---", "recycle: " + mBitmap1.isRecycled());
}
else
{
mFlipper.addView(addText("1", 0), 0);
Log.e("----", "flipper size: " + mFlipper.getChildCount());
rotate.setDuration(3000);
scale.setDuration(1000);
// mFlipper.setInAnimation(rotate);
// mFlipper.setOutAnimation(scale);
mFlipper.setDisplayedChild(0);
mFlipper.removeViewAt(1);
Log.e("----", "flipper size: " + mFlipper.getChildCount());
mIsButtonDown = false;
Log.v("---", "recycle: " + mBitmap2.isRecycled());
// 添加动画后就报RuntimeException: Canvas: trying to use a recycled bitmap
// 没有添加动画情况下,正常
mBitmap2.recycle();
Log.v("---", "recycle: " + mBitmap2.isRecycled());
}
}
}
}