在外部内存android中保存.gif图像

时间:2016-08-17 08:43:21

标签: android uri gif

我必须使用意图将URL中的GIF图像分享到其他一些应用程序,根据我的知识从url共享它们我必须先将它们保存在手机的内存中。 我使用GLIDE lib来显示它们,我怎么能存储它们才能共享?到目前为止我的代码(不工作):它只从GIF图像的一组帧中保存一个图像。

  if (mGIFArrayList != null) {
                              //  imageUri = getLocalBitmapUri(imageViewSimple);
                               // shareWithAppChooser(imageUri,"");
                                Glide
                                        .with(mContext)
                                        .load(mGIFArrayList.get(getPosition()).getStrUrl())
                                        .asGif()
                                        .toBytes()
                                        .into(new SimpleTarget<byte[]>() {
                                            @Override public void onResourceReady(final byte[] resource, GlideAnimation<? super byte[]> glideAnimation) {
                                                new AsyncTask<Void, Void, Void>() {
                                                    @Override protected Void doInBackground(Void... params) {
                                                      //  File sdcard = Environment.getExternalStorageDirectory();
                                                        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "shared_gif_" + System.currentTimeMillis() + ".gif");
                                                        File dir = file.getParentFile();
                                                        try {
                                                            if (!dir.mkdirs() && (!dir.exists() || !dir.isDirectory())) {
                                                                throw new IOException("Cannot ensure parent directory for file " + file);
                                                            }
                                                            BufferedOutputStream s = new BufferedOutputStream(new FileOutputStream(file));
                                                            s.write(resource);
                                                            s.flush();
                                                            s.close();
                                                        } catch (IOException e) {
                                                            e.printStackTrace();
                                                        }
                                                        return null;
                                                    }
                                                }.execute();
                                            }
                                        })
                                ;
                            }

1 个答案:

答案 0 :(得分:0)

在以下两行中确定drawable是GlideBitmapDrawable

    Drawable drawable = imageView.getDrawable();
    if (drawable instanceof GlideBitmapDrawable) {

然后按照以下内容将其投射到GifDrawable

   GifDrawable gifDrawable = ((GifDrawable) imageView.getDrawable());

我确定它因为GifDrawable和GlideBitmapDrawable而无法投放ClassCastException

不幸的是,我不认为您可以从GifDrawable中提取文件,因为它不会像这样工作。

可能是您最好的解决方法,就是将gif文件从link下载到设备存储,然后共享该文件。