好吧,我正在研究 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) 我正在尝试插入一个通用加载圈作为占位符,同时图像正在加载像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,稍后将显示图像.我需要一个能够自行旋转的抽屉.
我已经拥有了我的应用程序所需的所有图像,并且我正在尝试加速它并使其柔滑,所以我一直在使用Glide加载图像,它可以在我的应用程序的其他区域工作但不是在我的viewpager中.
在我的片段中,我试图像这样加载我的图像
Glide.with(this).load(R.drawable.my_drawable).into(myImageView);
Run Code Online (Sandbox Code Playgroud)
没有任何反应或出现,我没有得到Glide的异常或任何错误消息.
我正在使用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)
我想写一个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) 我正在使用 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) 我有一个活动,它通过滑行在 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) 但我没有注意到任何变化。
我想每次从图片活动转到主要活动时,我的“内存使用”应该会减少,然后当我用新图片再次开始我的图片活动时会增加。但从我在蓝色图表上看到的情况来看,它几乎只会增加。你明白我应该怎么做吗?
我在片段中有一个回收者视图,基本上我试图在回收者视图中加载歌曲列表.每行回收者视图包含一个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
我正在使用滑动从缓存中提取位图并将其保存在其他位置.下面的相关函数(基于这篇文章 :)无法触发提取.实际上,日志行'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) 我正在使用Glide图像加载器从特定URL加载图像,现在如果我将图像更新为相同的URL,Glide仍在我的imageview中显示缓存的图像.如何从同一个URL重新加载图像?
android ×10
android-glide ×10
animation ×1
caching ×1
drawable ×1
java ×1
mediastore ×1
memory-leaks ×1
spinner ×1