我正在使用Ion库,它运行良好。但另一方面,我必须下载图像并将其保存到app目录。
我要做的是,使用导航视图标题中的图像视图,并希望下载图像一次并显示该图像,直到和除非我将其释放
所以我正在使用Ion库来调用服务器,所以我想为什么不将Ion库也用于此目的。我只知道它有一个有效的功能,用于下载图像并在图像视图中显示它
// This is the "long" way to do build an ImageView request... it allows you to set headers, etc.
Ion.with(context)
.load("http://example.com/image.png")
.withBitmap()
.placeholder(R.drawable.placeholder_image)
.error(R.drawable.error_image)
.animateLoad(spinAnimation)
.animateIn(fadeInAnimation)
.intoImageView(imageView);
// but for brevity, use the ImageView specific builder...
Ion.with(imageView)
.placeholder(R.drawable.placeholder_image)
.error(R.drawable.error_image)
.animateLoad(spinAnimation)
.animateIn(fadeInAnimation)
.load("http://example.com/image.png");
我真的不知道如何使用它并将图像保存在app目录中,而不是直接在Image视图中显示它。
我想下载图片并将图片保存在app目录中。我可以将Ion库用于此目的,或者我还需要做更多的事情。 ??请帮忙。
答案 0 :(得分:1)
Ion.with(this).load("url").withBitmap().asBitmap()
.setCallback(new FutureCallback<Bitmap>() {
@Override
public void onCompleted(Exception e, Bitmap result) {
// do something with your bitmap
}
});
您将获得onCompleted回调的位图,即您的图像为位图。现在您可以轻松保存到您想要的位置。
对于保存位图:
//the string here is the file name
public static void saveBitmap(Context context, Bitmap original, String name) {
try {
File imageFile = createPngFileFromBitmap(name, original);
addImageToGallery(imageFile.getAbsolutePath(), context);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void addImageToGallery(final String filePath, final Context context) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
values.put(MediaStore.MediaColumns.DATA, filePath);
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
public static File createPngFileFromBitmap(String name, Bitmap bitmap) throws FileNotFoundException {
File picture = createPngFile(name);
OutputStream stream = new FileOutputStream(picture);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return picture;
}
private static File createPngFile(String name) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Your folder name");
if (!file.mkdirs()) {
} else {
file.mkdirs();
}
return new File(file.getAbsolutePath(), name);
}
祝你好运!
答案 1 :(得分:0)
是的,您可以使用Ion将图像保存到内部/外部存储器中。您可以参考more detail
的官方文档Ion.with(context)
.load("http://example.com/really-big-file.zip")
// have a ProgressBar get updated automatically with the percent
.progressBar(progressBar)
// and a ProgressDialog
.progressDialog(progressDialog)
// can also use a custom callback
.progress(new ProgressCallback() {@Override
public void onProgress(int downloaded, int total) {
System.out.println("" + downloaded + " / " + total);
}
})
.write(new File("/sdcard/really-big-file.zip"))
.setCallback(new FutureCallback<File>() {
@Override
public void onCompleted(Exception e, File file) {
// download done...
// do stuff with the File or error
}
});