标签: android-glide

如何从 Jetpack Compose 中的 URL 加载图像?

好吧,我正在研究 Compose UI,并且我一直在学习基本的东西。其中之一是使用 Glide 显示来自 URL 的图像。

我已经尝试了下面的代码,但没有调用委托(onResourceReady 和 onLoadCleared)。

我错过了什么?

@Composable
fun loadPicture(url: String, contentDescription:String, modifier: Modifier = Modifier) {

  val bitmapState = remember { mutableStateOf<Bitmap?>(null) }
  Glide.with(LocalContext.current).asBitmap().load(url).into(
    object : CustomTarget<Bitmap>() {
        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
            bitmapState.value = resource
        }
        override fun onLoadCleared(placeholder: Drawable?) {}
    }
)

  bitmapState.value?.let {
    Image(
        contentDescription = contentDescription,
        bitmap = it.asImageBitmap(),
        modifier = modifier
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

android android-glide android-jetpack-compose

10
推荐指数
1
解决办法
3662
查看次数

你如何使用加载占位符作为动画微调器与像Glide,毕加索等图像加载器?

我正在尝试插入一个通用加载圈作为占位符,同时图像正在加载像Glide或Picasso这样的图像加载器库.

我不能为我的生活找到你应该如何从xml创建一个旋转drawable.

我尝试通过创建动画列表在XML中使用AnimationDrawable,但它甚至没有显示(甚至不是静态的).

我只想要一个简单的圆圈,它可以自动旋转,所有这些都在xml drawable中,所以我可以将id作为占位符传递给我的图像加载器.如果那不可能请现在告诉我,所以我可以节省很多研究:)

编辑:一些代码使它更清晰,我需要一个旋转drawable这个Glide命令:

Glide.with(context)
.load(imageUrl)
.into(imageView)
.placeHolder(R.drawable.spinning_loading_placeholder);
Run Code Online (Sandbox Code Playgroud)

在加载图像时,将显示占位符drawable,稍后将显示图像.我需要一个能够自行旋转的抽屉.

animation android spinner drawable android-glide

9
推荐指数
1
解决办法
6461
查看次数

为什么Glide不会将图像从资源ID加载到我的ImageView?

我已经拥有了我的应用程序所需的所有图像,并且我正在尝试加速它并使其柔滑,所以我一直在使用Glide加载图像,它可以在我的应用程序的其他区域工作但不是在我的viewpager中.

在我的片段中,我试图像这样加载我的图像

Glide.with(this).load(R.drawable.my_drawable).into(myImageView);
Run Code Online (Sandbox Code Playgroud)

没有任何反应或出现,我没有得到Glide的异常或任何错误消息.

android android-glide

9
推荐指数
2
解决办法
1万
查看次数

滑动加载缩略图不起作用

我正在使用Glide从视频加载缩略图,但它似乎不适用于我的应用程序.由于某种原因,ImageView只是空的.

Glide.with(context)
            .load(url)
            .asBitmap()
            .thumbnail(0.1f)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(target);
Run Code Online (Sandbox Code Playgroud)

我添加了一个监听器,所以我可以找出错误但抛出的异常为空.

我尝试使用相同的URL使用ThumbnailUtils,因为我认为它可能有问题,但缩略图加载正常.

有没有经历过相同的人?我正在使用Nexus 7(6.0.1)

android android-glide

9
推荐指数
2
解决办法
1万
查看次数

与Glide同步加载图像

我想写一个Espresso matcher来验证`ImageView'是否有特定的位图设置.由于应用程序通过Glide进行图像加载,我认为在实际比较预期位图和实际位图之前,我必须在测试方面做同样的事情以考虑裁剪/居中.

这是我到目前为止提出的:

BitmapRequestBuilder<Uri, Bitmap> bitmapRequest = Glide.with(imageView.getContext())
        .load(Uri.parse("file:///android_asset/" + mPath))
        .asBitmap();

switch (imageView.getScaleType()) {
    case CENTER_CROP:
        bitmapRequest.centerCrop();
        break;
    case FIT_CENTER:
    case FIT_START:
    case FIT_END:
        bitmapRequest.fitCenter();
        break;
    default:
        // no scaling applied to the ImageView under test
}

AtomicReference<Bitmap> bmRef = new AtomicReference<>();
bitmapRequest.into(new SimpleTarget<Bitmap>(
            imageView.getMeasuredWidth(), 
            imageView.getMeasuredHeight()
) {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        bmRef.set(resource);
    }
});

// ???

try {
    Bitmap expected = bmRef.get();
    return expected.sameAs(bitmap);
} catch (Exception e) {
    throw new IllegalStateException("could …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-espresso android-glide

9
推荐指数
1
解决办法
1694
查看次数

Glide : 在 Android/Java 中获取缓存文件位置

我正在使用 Glide 在我的应用程序中显示图像。现在我想知道 Glide 存储从 url 下载的缓存图像的位置。

我正在使用下面的代码来显示图像。

Glide.with(mContext)
            .load(mData.get(position).getImage())
            .centerCrop()
            .override(300, 300)
            .placeholder(R.drawable.default_small)
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(holder.ivCapturedImage);
Run Code Online (Sandbox Code Playgroud)

android caching android-glide

9
推荐指数
2
解决办法
8406
查看次数

Android 内存泄漏与 Glide

我有一个活动,它通过滑行在 ImageViews 中加载图片。这是我的滑行代码示例:

    Glide.with(ImageVOne.getContext())
            .load(geoInfo.getPhotoUrl1())
            .skipMemoryCache(true)
            .priority(Priority.NORMAL)
            .into(ImageVOne);
Run Code Online (Sandbox Code Playgroud)

我加载了 1 到 35 张图片,每张图片应该在 150ko 和 250ko 之间。我不能减少那个。

这个活动可以在一个会话中从主活动访问多次,每次加载不同的图片。例如,第一次是华盛顿的照片,然后是伦敦的照片等等。

我的问题是每次启动加载图片的活动时,内存的使用都会增加很多: 在此处输入图片说明

我可以启动 3 到 5 次活动,然后应用程序崩溃。错误信息是

java.lang.OutOfMemoryError: Failed to allocate a 1411340 byte allocation with 1126320 free bytes and 1099KB until OOM
Run Code Online (Sandbox Code Playgroud)

我读过关于内存泄漏的帖子,但我认为 Glide 会避免这个问题。我的图片活动在另一个活动开始之前完成,但分配给我的应用程序的内存似乎没有下降。我还在android:noHistory="true"清单中添加了我的图片活动,但它没有改变任何东西。

android:largeHeap="true"在我的清单中添加了但它只是推迟了我的问题(我可以启动图片活动大约 10 到 15 次)并且在应用程序崩溃之前我的图像视图中没有加载很多图片,所以这对我来说不是一个好的解决方案。

我还尝试在使用 glide 时添加 .skipMemoryCache (true) 但我没有注意到任何变化。

我想每次从图片活动转到主要活动时,我的“内存使用”应该会减少,然后当我用新图片再次开始我的图片活动时会增加。但从我在蓝色图表上看到的情况来看,它几乎只会增加。你明白我应该怎么做吗?

android memory-leaks android-glide

9
推荐指数
2
解决办法
1万
查看次数

在回收站视图中加载大量项目

我在片段中有一个回收者视图,基本上我试图在回收者视图中加载歌曲列表.每行回收者视图包含一个imageview(用于专辑封面)和textview(用于歌曲名称).我遇到麻烦,当数据集的大小很大时,即当歌曲太多时,回收者视图滞后,应用程序最终给出ANR.我正在使用Glide在每行的imageview中加载专辑艺术.谷歌音乐播放器如何能够显示如此大量的歌曲而没有任何延迟?

编辑: 这是我的SongsFragment

public class SongsFragment extends Fragment {
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
ProgressBar progressBar;    // progress bar to show after every 30 items
NestedScrollView nestedScrollView;  //for smooth scrolling of recyclerview as well as to detect the end of recyclerview
RecyclerView recyclerView;
ArrayList<Song> songMainList = new ArrayList<>();  //partial list in which items are added
ArrayList<Song> songAllList = new ArrayList<>(); //Complete List of songs
SongAdapter songsAdapter;
private LinearLayoutManager layoutManager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …
Run Code Online (Sandbox Code Playgroud)

android mediastore recycler-adapter android-recyclerview android-glide

9
推荐指数
2
解决办法
1万
查看次数

滑翔图像提取

我正在使用滑动从缓存中提取位图并将其保存在其他位置.下面的相关函数(基于这篇文章 :)无法触发提取.实际上,日志行'Log.d(TAG,"即将开始提取");' 下面永远不会被触发.

关于为什么简单目标函数永远不会被调用的任何想法?

public byte[] extractImageFromCache(Context context, String pictureURL) {

    byte[] byteArray = new byte[0];
    if (context != null && pictureURL != null && !pictureURL.isEmpty()) {

        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        Glide.with(context)
            .load(pictureURL)
            .asBitmap()
            .toBytes()
            .diskCacheStrategy(DiskCacheStrategy.SOURCE) // Load the original hires image
            .into(new SimpleTarget<byte[]>() {
                @Override public void onResourceReady(final byte[] resource, GlideAnimation<? super byte[]> glideAnimation) {
                    Log.d(TAG, "About to start extraction");
                    new AsyncTask<Void, Void, Void>() {
                        @Override protected Void doInBackground(Void... params) {
                            Log.d(TAG, "Start extraction");
                            try { …
Run Code Online (Sandbox Code Playgroud)

java android android-glide

9
推荐指数
1
解决办法
785
查看次数

如何从同一个网址重新加载Glide中的图像?

我正在使用Glide图像加载器从特定URL加载图像,现在如果我将图像更新为相同的URL,Glide仍在我的imageview中显示缓存的图像.如何从同一个URL重新加载图像?

android image-loading android-glide

9
推荐指数
3
解决办法
7366
查看次数