我必须使用意图将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();
}
})
;
}
答案 0 :(得分:0)
在以下两行中确定drawable是GlideBitmapDrawable
Drawable drawable = imageView.getDrawable();
if (drawable instanceof GlideBitmapDrawable) {
然后按照以下内容将其投射到GifDrawable
:
GifDrawable gifDrawable = ((GifDrawable) imageView.getDrawable());
我确定它因为GifDrawable和GlideBitmapDrawable而无法投放ClassCastException
。
不幸的是,我不认为您可以从GifDrawable中提取文件,因为它不会像这样工作。
可能是您最好的解决方法,就是将gif文件从link
下载到设备存储,然后共享该文件。