Rev 21569 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.saholic.profittill;import android.content.Context;import android.graphics.Canvas;import android.graphics.Movie;import android.net.Uri;import android.os.SystemClock;import android.util.AttributeSet;import android.util.Log;import android.view.View;import java.io.FileNotFoundException;import java.io.InputStream;/*** Created by rajender on 24/5/17.*/public class GIFView extends View {private InputStream mInputStream;private Movie mMovie;private int mWidth, mHeight;private long mStart;private Context mContext;public GIFView(Context context) {super(context);this.mContext = context;}public GIFView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public GIFView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.mContext = context;if (attrs.getAttributeName(1).equals("background")) {int id = Integer.parseInt(attrs.getAttributeValue(1).substring(1));setGifImageResource(id);}}private void init() {setFocusable(true);mMovie = Movie.decodeStream(mInputStream);mWidth = mMovie.width();mHeight = mMovie.height();requestLayout();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(mWidth, mHeight);}@Overrideprotected void onDraw(Canvas canvas) {long now = SystemClock.uptimeMillis();if (mStart == 0) {mStart = now;}if (mMovie != null) {int duration = mMovie.duration();if (duration == 0) {duration = 1000;}int relTime = (int) ((now - mStart) % duration);mMovie.setTime(relTime);mMovie.draw(canvas, 0, 0);invalidate();}}public void setGifImageResource(int id) {mInputStream = mContext.getResources().openRawResource(id);init();}public void setGifImageUri(Uri uri) {try {mInputStream = mContext.getContentResolver().openInputStream(uri);init();} catch (FileNotFoundException e) {Log.e("GIfImageView", "File not found");}}}