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(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助。