我正在寻找Android中的异步图像加载和缓存库.我打算使用Picasso,但我发现Universal Image Loader在GitHub上更受欢迎.有谁知道这两个图书馆?优点和缺点的摘要会很棒.
(我的所有图像都在本地磁盘上,因此我不需要联网,因此我认为Volley不合适)
我正在尝试在Fresco中加载图像,但图像似乎没有加载.当我添加占位符视图时,占位符显示.
public static void loadImg(final Context c, final SimpleDraweeView view, final String img){
Uri uri = Uri.parse("https://placekitten.com/g/201/300");
view.setImageURI(uri);
}
Run Code Online (Sandbox Code Playgroud)
注意,我正在应用程序中初始化Fresco,并且我在Manifest中有互联网使用.
SimpleDraweeView
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/small_box_image"
android:layout_width="match_parent"
android:layout_height="150dp"
fresco:placeholderImage="@drawable/google"
fresco:fadeDuration="300"
fresco:viewAspectRatio="1.33"
/>
Run Code Online (Sandbox Code Playgroud)
调用loadImg的方法
public static View generateTileView(Context c, Tile t){
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view;
boolean desc = false;
switch(t.getObjectTypeName()){
case Tile.OBJECT_NAME:
view = inflater.inflate(R.layout.view_tile_small_object, null);
break;
case Tile.LOOK_CLOSER_NAME:
view = inflater.inflate(R.layout.view_tile_small_look_closer, null);
desc = true;
break;
case Tile.STORY_NAME:
view = inflater.inflate(R.layout.view_tile_small_story, null);
desc = true;
break;
case Tile.TOUR_NAME:
view = …
Run Code Online (Sandbox Code Playgroud) 我使用了Fresco 0.5.2:
dependencies {
compile 'com.facebook.fresco:fresco:0.5.2'
}
Run Code Online (Sandbox Code Playgroud)
我想用来SimpleDraweeView
加载一个gif图像drawable
.这是我的代码:
String path = ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+ getResources().getResourcePackageName(R.drawable.default_app) + "/"
+ getResources().getResourceTypeName(R.drawable.default_app) + "/"
+ getResources().getResourceEntryName(R.drawable.default_app);
Uri uri = Uri.parse(path);
simpleDraweeView =(SimpleDraweeView)
this.findViewById(R.id.simple_drawee_view);
ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(uri).build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(imageRequest)
.setAutoPlayAnimations(true)
.build();
simpleDraweeView.setController(controller);
Run Code Online (Sandbox Code Playgroud)
这default_app
只是一个jpeg图像,它不起作用.
我用这个作为Fresco提到的文件.路径或代码有问题吗?
我正在创建一个应用程序,它应该显示一些图像Fragment
,其中大部分是从互联网上下载的.
我正在使用Glide来处理我在我的CardViews上的图像加载和我的图像滑块上的Fresco(这个问题在SO上解释了我为什么使用两个图像库).
的lib的壁画部分主要是基于这个叉子的AndroidImageSlider
.
重要提示:我正在尝试加载的图像可以是PNG
或SVG
.
更多信息:我正在使用运行Android 5.0.2 的Moto Maxx(国际版Droid Turbo).也发生在运行Android 4.4.2(cyanogen mod)的三星Galaxy S4上,但它的发生频率要低得多.
PS:我没有使用NDK.
有时,我的应用程序只是崩溃,无处不在,甚至没有任何用户交互.当它发生时,我在logcat上收到以下错误消息:
Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894
Run Code Online (Sandbox Code Playgroud)
全栈:
04-07 07:59:08.110 21894 21894 F libc : Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 (asus.saitestore)
04-07 07:59:08.161 21946 21946 E Diag_Lib: …
Run Code Online (Sandbox Code Playgroud) 我有一堆drawables,我想用壁画加载,我想使用wrap_content
这些图像的大小,我怎么能在壁画的xml中做到这一点?或者,如果不可能使用xml,您如何在代码中执行此操作?
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/myImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fresco:placeholderImage="@mipmap/myImage"/>
Run Code Online (Sandbox Code Playgroud)
除非我设置固定大小,否则上述代码无效.
我正试图在我的Android应用程序中用Fresco替换Picasso.但是我不确定如何使用Fresco简单地加载位图.
毕加索我会做以下几点.
Bitmap poster = Picasso.with(getActivity())
.load(url)
.resize(Utils.convertDpToPixel(WIDTH,HEIGHT))
.centerCrop()
.get();
Run Code Online (Sandbox Code Playgroud)
我一直无法弄清楚如何用这个Fresco创建一个Bitmap.有任何想法吗?
我正在使用Fresco库.
我在Fresco文档中找不到任何相关信息,如何从Fresco的磁盘缓存中获取图像文件?
我正在将图像上传到我的服务器,一旦上传,我的服务器就会响应新的URI(可以是与旧URL相同的URL),我想删除旧的缓存图像并为新URI插入新图像.
我试着这样做:
// Retrofit2 onResponse
String newImageUri = response.body().getUri();
String oldImageUri = Preferences.getUser().getImageUrl();
// Remove old image from cache
Fresco.getImagePipeline().evictFromCache(Uri.parse(oldImageUri));
Fresco.getImagePipeline().evictFromDiskCache(Uri.parse(oldImageUri));
Fresco.getImagePipeline().evictFromMemoryCache(Uri.parse(oldImageUri));
Fresco.getImagePipelineFactory().getMainFileCache().remove(new SimpleCacheKey(oldImageUri));
// Insert new image at new URI
try {
Fresco.getImagePipelineFactory().getMainFileCache().insert(new SimpleCacheKey(newImageUri), new WriterCallback() {
@Override
public void write(OutputStream os) throws IOException {
os.write(imageData); // byte[] or the new Bitmap
}
});
}
catch (Exception e) {
e.printStackTrace();
}
uriProfileImage.setImageURI(newImageUri);
Run Code Online (Sandbox Code Playgroud)
没有例外,但我仍然只看到旧图像.
我正在使用facebook Fresco库和SimpleDraweeView来显示文件中的头像图像:
Uri avaURI = Uri.fromFile(new File(getCacheDir(), Constants.AVA_FILE_NAME));
simpleDrawee.setImageURI(avaURI);
Run Code Online (Sandbox Code Playgroud)
但是,如果我用图片更改文件(删除以前的文件并使用新图像创建相同的文件),我该如何更新(刷新)SimpleDraweeView?它仍然显示旧版本的图像.(我试图禁用缓存Fresco.getImagePipeline().evictFromMemoryCache(avaURI);
但它没有帮助).