GIF Image display using WebView

后端 未结 8 821
北荒
北荒 2020-12-08 23:11

Can someone please provide a code to display GIF images in a webview ( I\'m already able to display the same using frame animation of png images) Now I want a way to display

8条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-08 23:55

    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

    
        
    
    
    

    Resource : How to display gif imageview in android

提交回复
热议问题