您的位置:首页 > 移动开发 > Android开发

Android:GIF、invalidate

2013-06-20 20:05 239 查看
仿照apiDemos的例子,com.example.android.apis.graphics.BitmapDecode,直接修改来用:
public class PlayGifActivity extends Activity
{

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new SampleView(this,R.drawable.animated_gif));
}

private static class SampleView extends View
{

private Movie mMovie;
private long mMovieStart;

// Set to false to use decodeByteArray
private static final boolean DECODE_STREAM = true;

private static 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 (java.io.IOException e)
{
}
return os.toByteArray();
}

public SampleView(Context context,int resID)
{
super(context);
setFocusable(true);

java.io.InputStream is;
is = context.getResources().openRawResource(resID);
if (DECODE_STREAM)
{
mMovie = Movie.decodeStream(is);
}
else
{
byte[] array = streamToBytes(is);
mMovie = Movie.decodeByteArray(array, 0, array.length);
}
}

@Override
protected void onDraw(Canvas canvas)
{
canvas.drawColor(0xFFCCCCCC);

long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0)
{ // first time
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();//重绘方法,调用下一帧
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GIF invalidate