public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private class SampleView extends View{
private static final boolean DECODE_STREAM = true;
private Bitmap mBitmap1;
private Bitmap mBitmap2;
private Bitmap mBitmap3;
private Bitmap mBitmap4;
private Drawable mDrawable;
private Movie mMovie;
private long mMovieStart;
public SampleView(Context context) {
super(context);
setFocusable(true);
InputStream is;
is=getResources().openRawResource(R.drawable.beach);
BitmapFactory.Options opts=new BitmapFactory.Options();
Bitmap bm;
opts.inJustDecodeBounds=true;
bm=BitmapFactory.decodeStream(is, null, opts);
opts.inJustDecodeBounds=false;
opts.inSampleSize=4;
mBitmap1=BitmapFactory.decodeStream(is, null, opts);
is=getResources().openRawResource(R.drawable.frog);
mBitmap2=BitmapFactory.decodeStream(is);
int w=mBitmap2.getWidth();
int h=mBitmap2.getHeight();
int[] pixels=new int[w*h];
mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h);
mBitmap3=Bitmap.createBitmap(pixels, w, h, Bitmap.Config.ARGB_8888);
mBitmap4=Bitmap.createBitmap(pixels, w, h, Bitmap.Config.ARGB_4444);
mDrawable=getResources().getDrawable(R.drawable.button);
mDrawable.setBounds(150, 20, 300, 100);
is=getResources().openRawResource(R.drawable.animated_gif);
if(DECODE_STREAM){
mMovie=Movie.decodeStream(is);
}else{
byte[] array=streamToBytes(is);
mMovie=Movie.decodeByteArray(array, 0, array.length);
}
}
private byte[] streamToBytes(InputStream is) {
ByteArrayOutputStream os=new ByteArrayOutputStream(1024);
byte[] buffer=new byte[1024];
int len;
try {
while((len=is.read(buffer))>0){
os.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
return os.toByteArray();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(mBitmap1, 10, 10, null);
canvas.drawBitmap(mBitmap2, 10, 170, null);
canvas.drawBitmap(mBitmap3, 110, 170, null);
canvas.drawBitmap(mBitmap4, 210, 170, null);
mDrawable.draw(canvas);
long now=SystemClock.uptimeMillis();
if(mMovieStart==0){
mMovieStart=now;
}
if(mMovie!=null){
int dur=mMovie.duration();
if(dur==0){
dur=1000;
}
int relTime=(int) ((now-mMovieStart)%dur);
mMovie.setTime(relTime);
mMovie.draw(canvas, getWidth()-mMovie.width(), getHeight()-mMovie.height());
invalidate();
}
}
}
}