我有一个可以在线和离线工作的 Android 应用程序,我正在使用 Glide 进行图像加载。下载数据库后,我想并行启动两个任务:将所有图像下载到磁盘并加载当前屏幕(然后是下一个屏幕)所需的所有图像。问题是要下载的图像量非常大,并且当前屏幕请求的图像似乎添加在同一下载队列的末尾。所以我最终得到“空”屏幕,直到所有图像都下载到磁盘缓存。我怎样才能让这些任务并行工作?
public class GlideActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glide);
downloadAllImages();
updateUi();
}
private void updateUi() {
ImageView imageView1 = (ImageView) findViewById(R.id.image_view1);
ImageView imageView2 = (ImageView) findViewById(R.id.image_view2);
ImageView imageView3 = (ImageView) findViewById(R.id.image_view3);
cachedGlideRandomRequest().into(imageView1);
cachedGlideRandomRequest().into(imageView2);
cachedGlideRandomRequest().into(imageView3);
}
private void downloadAllImages() {
for (int i = 0; i < 50; i++) {
cachedGlideRandomRequest().preload();
}
}
private DrawableRequestBuilder<String> cachedGlideRandomRequest() {
return Glide.with(getApplicationContext())
.load("https://unsplash.it/200/300?image=" + System.nanoTime() % 1000)
.diskCacheStrategy(DiskCacheStrategy.SOURCE);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是在downloadAllImages()仍在处理背景的同时在 ImageViews …
我的驱动器网址是 - https://drive.google.com/file/d/0B3DFHb2-MdGYa2NMUkVtVkZ1V1k/view?usp=sharing
我想使用 glide 在 android imageview 中显示它。我尝试了很多方法来展示它。以下是我要显示的代码 -
Glide.with(getActivity()).load(readExcelFeed.getImage().toString()).into(ivQueImage);
Run Code Online (Sandbox Code Playgroud)
请让我知道其中有什么问题。
我将我的图像及其缩小尺寸的图像(模糊)存储在我的 Amazon 服务器中,并将这两个路径存储在数据库中。
现在我想知道如果原始图像没有被缓存,如何首先显示模糊图像,点击下载它会下载原始图像。我在这里使用 Glide ......
我试过这个
Glide.with(this)
.load(mainUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.thumbnail(Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE))
.centerCrop()
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
但问题是它会在后台自动下载原始图像。
我需要从图像中获取 http 响应标头。如何为 Glide 的每个请求创建拦截器?是否有必要创建一个 Glide 模块?
我正在显示来自服务器的图像,并滑入 recyclerview。当用户单击图像时,它会显示完整图像。我希望该用户可以在单击按钮时保存该图像。
imageViewPreview = (ImageView) view.findViewById(R.id.image_preview);
Photos image = images.get(position);
Glide.with(getActivity())
.load(image.getUrl())
.thumbnail(Glide.with(getActivity()).load(R.drawable.loader))
.fitCenter()
.crossFade()
.into(imageViewPreview);
Run Code Online (Sandbox Code Playgroud) 我使用滑行版本4.7.1,我想在onLoadFailed时使用默认图像。
这是我的代码
Glide.with(context).load(imageUrl).listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, com.bumptech.glide.request.target.Target<Drawable> target, boolean isFirstResource) {
// fail
// How can i use default image in imgvAssetPicture?
}
@Override
public boolean onResourceReady(Drawable resource, Object model, com.bumptech.glide.request.target.Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// success
imgvLoadingProgressbar.setVisibility(View.INVISIBLE);
imgvAssetPicture.setVisibility(View.VISIBLE);
return false;
}
}).into(imgvAssetPicture);
Run Code Online (Sandbox Code Playgroud) 使用CollapsingToolbarLayout,Toolbar和嵌入的ImageView时,我遇到了一个奇怪的行为.这是我的代码:
<android.support.design.widget.AppBarLayout
android:id="@+id/bla"
android:layout_width="match_parent"
android:layout_height="256dp">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/md_white_1000"
android:minHeight="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
app:theme="@style/ThemeOverlay.AppCompat.Light" />
<ImageView
android:id="@+id/fragment_kids_profile_pic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
和Glide建设者:
Glide.with(getActivity())
.load(file)
.fitCenter()
.into(profilePicture);
Run Code Online (Sandbox Code Playgroud)
在通过Glide设置图像之前,工具栏行为完全正常,在我的情况下是"固定".设置图像后,工具栏布局丢失,图像发生(向上滚动后).一些照片要澄清:
任何帮助,将不胜感激 !
是否可以使用滑行缓存图像而不在imageView?中显示它。如果是,那又如何?
现在,我正在执行以下代码:
Glide
.with(getApplicationContext())
.load("imageUrl")
.override(windowWidth(),(int)windowWidth()*0.5))
.diskCacheStrategy(DiskCacheStrategy.ALL);
Run Code Online (Sandbox Code Playgroud)
但这是行不通的,当应用打开时,滑行不是从缓存而是从URL加载图像。
根据文档,
内部缓存工厂将磁盘缓存放置在应用程序的内部缓存目录中,并设置最大大小为250MB。
当我尝试在我的应用程序中实现一些脱机功能时,可能需要大于250MB的缓存大小。那么Glide是否允许修改缓存大小,或者我需要找到一种替代方法?如果是这样,我应该遵循什么机制?
我在文档中看到了一种增加这种方法的方法。
builder.setDiskCache(
new InternalCacheDiskCacheFactory(context, yourSizeInBytes));
Run Code Online (Sandbox Code Playgroud)
如何在我的代码中实现呢?
我正在使用滑行4.3.1
我想调用签名方法,但没有出现。
我的代码
Glide.with(context).load(context.getFilesDir().getPath() + "/" + imgName).into(imgView);
Run Code Online (Sandbox Code Playgroud)
我想做这个
Glide.with(context).load(context.getFilesDir().getPath() + "/" + imgName).signature(new StringSignature("someVersion")).into(imgView);
Run Code Online (Sandbox Code Playgroud)
我正在使用android studio,当我将鼠标悬停在签名方法上时,看到以下消息:无法解析方法'signature(StringSignature)'。
我的构建gradle:
dependencies {
compile 'com.github.bumptech.glide:glide:4.3.1'
}
Run Code Online (Sandbox Code Playgroud)