Android通过Movie展示Gif格式图片
本文实例为大家分享Android通过Movie展示Gif格式图片的相关代码,供大家参考,具体内容如下
publicclassCommonGifViewextendsView{
privateResourcesmResources;
privateMoviemMovie;
privatelongstartTime=0;
privatefloatwidthRatio;
privatefloatheightRatio;
publicCommonGifView(Contextcontext){
this(context,null);
}
publicCommonGifView(Contextcontext,AttributeSetattrs){
this(context,attrs,0);
}
publicCommonGifView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
mResources=context.getResources();
TypedArrayta=context.obtainStyledAttributes(attrs,R.styleable.custom_gif_view);
intsrc_id=ta.getResourceId(R.styleable.custom_gif_view_gif_src,-1);
setGifViewBg(src_id);
ta.recycle();
}
/**
*为View设置gif格式图片背景
*@description:
*@authorldm
*@date2016-2-18上午9:21:16
*/
privatevoidsetGifViewBg(intsrc_id){
if(src_id==-1){return;}
//获取对应资源文件的输入流
InputStreamis=mResources.openRawResource(src_id);
mMovie=Movie.decodeStream(is);//解码输入流为Movie对象
requestLayout();
}
/*
*这个方法供Activity中使用
*/
publicvoidsetGifStream(InputStreamis){
mMovie=Movie.decodeStream(is);
requestLayout();
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
longnow=SystemClock.uptimeMillis();
if(startTime==0){//如果第一帧,记录起始时间
startTime=now;
}
if(mMovie!=null){//如果返回值不等于null,就说明这是一个GIF图片
intduration=mMovie.duration();//取出动画的时长
if(duration==0){
duration=1000;
}
intcurrentTime=(int)((now-startTime)%duration);//算出需要显示第几帧
mMovie.setTime(currentTime);
//mMovie.draw(canvas,getWidth()-mMovie.width(),getHeight()-mMovie.height());
floatscale=Math.min(widthRatio,heightRatio);
canvas.scale(scale,scale);
mMovie.draw(canvas,0,0);
invalidate();
}
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
if(mMovie!=null){//如果返回值不等于null,就说明这是一个GIF图片
intw=mMovie.width();//宽度
inth=mMovie.height();//高度
if(w<=0){
w=1;
}
if(h<=0){
h=1;
}
intleft=getPaddingLeft();
intright=getPaddingRight();
inttop=getPaddingTop();
intbottom=getPaddingBottom();
intwidthSize,heightSize;
w+=left+right;
h+=top+bottom;
w=Math.max(w,getSuggestedMinimumWidth());
h=Math.max(h,getSuggestedMinimumHeight());
widthSize=resolveSizeAndState(w,widthMeasureSpec,0);//根据你提供的大小和MeasureSpec,返回你想要的大小值
heightSize=resolveSizeAndState(h,heightMeasureSpec,0);
widthRatio=(float)widthSize/w;
heightRatio=(float)heightSize/h;
setMeasuredDimension(widthSize,heightSize);
}
else{
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
}
}
}
自定义属性res/values/attrs.xml文件:
<?xmlversion="1.0"encoding="utf-8"?> <resources> <declare-styleablename="custom_gif_view"> <attrname="gif_src"format="reference"></attr> </declare-styleable> </resources>
在Activity中使用:
publicclassMainActivityextendsActivity{
privateCommonGifViewview;
privateInputStreamis;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view=(CommonGifView)findViewById(R.id.gif_test);
try{
is=getAssets().open("test01.gif");
view.setGifStream(is);
}
catch(IOExceptione){
e.printStackTrace();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。