Display Animated GIF

后端 未结 30 2045
无人及你
无人及你 2020-11-22 02:11

I want to display animated GIF images in my aplication. As I found out the hard way Android doesn\'t support animated GIF natively.

However it can display animations

30条回答
  •  迷失自我
    2020-11-22 02:48

    Create a package named “Utils” under src folder and create a class named “GifImageView”

    public class GifImageView extends View {
        private InputStream mInputStream;
        private Movie mMovie;
        private int mWidth, mHeight;
        private long mStart;
        private Context mContext;
        public GifImageView(Context context) {
            super(context);
            this.mContext = context;
        }
        public GifImageView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
        public GifImageView(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();
        }
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            setMeasuredDimension(mWidth, mHeight);
        }
        @Override
        protected 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");
            }
        }
    }
    

    Now define GifImageView in MainActivity File: src/activity/MainActivity.class

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            GifImageView gifImageView = (GifImageView) findViewById(R.id.GifImageView);
            gifImageView.setGifImageResource(R.drawable.smartphone_drib);
        }
    }
    

    Now UI Part File: res/layout/activity_main.xml

    
        
    
    
    

    Resourece code : Android example

提交回复
热议问题