我正在使用Glide在Android上下载和缓存图像.一切都很好,除了我不想直接加载位图ImageView
,我不想有淡入淡出动画,也不想有图像占位符.
我想要的只是创建一个全局方法,它将帮助我在整个应用程序中下载图像.
public class MyApp extends Application {
public static void downloadImage(String url, final OnImageLoadedCallback callback) {
// And how to implement the listener ?
RequestListener<String, Bitmap> requestListener = new RequestListener<String, Bitmap() {
@Override
public boolean onException(Exception exc, String string, Target<Bitmap> target, boolean isFirstResource) {
callback.onDone(null);
return false;
}
@Override
public boolean onResourceReady(Bitmap bitmap, String string, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
callback.onDone(bitmap);
return false;
}
};
Glide.with(context)
.load(url)
.asBitmap()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(requestListener);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何实现监听器.RequestListener …
我正试图在Android上播放视频TextureView
.关于视频任务运作良好.但MediaPlayer.prepare();
需要一些时间.所以我想在那个时候展示一些占位符.我试图用Glide这样做:
public static final Rect rc = new Rect();
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h) {
Surface s = new Surface(surfaceTexture);
Glide.with(mTextureView.getContext())
.load(thumbUrl)
.asBitmap()
.dontAnimate()
.centerCrop()
.into(new SimpleTarget<Bitmap>(w, h) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
rc.set(0,0,w,h);
Canvas c = mTextureView.lockCanvas(rc);
if (c == null)
return;
c.drawBitmap(resource, 0, 0, null);
mTextureView.unlockCanvasAndPost(c);
}
});
try {
mMediaPlayer.setDataSource(url);
mMediaPlayer.setSurface(s);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mMediaPlayer.setVolume(0,0);
mMediaPlayer.start();
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用Glide从服务器上加载所有图像,但是我正在尝试以正确的方式设置它们以进行通知和RemoteControlClientCompat(这是锁定屏幕的酷事).我正在开发一个音乐播放器,所以每次更改一首歌时,通知的歌曲封面都必须改变.我有这个代码,它第一次工作(虽然图像是从url或drawable加载),但不是第二次调用时.图像不会改变!更改歌曲时会调用CustomNotification.并且在启动活动时调用RegisterRemoteClient.
如果这不是正确的方法,请说明如何.
public void CustomNotification() {
Log.d(TAG, "Set custom notification");
simpleRemoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_custom);
expandedRemoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_big);
mNotification = new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.mipmap.ic_main_logo)
.setTicker(mSongTitle + " - " + mSongAuthors)
.setContentTitle(mSongTitle).build();
setRemoteListeners(simpleRemoteView);
setRemoteListeners(expandedRemoteView);
try {
//Check if playingSong has a cover url, if not set one from drawable
if(!playingSong.has("cover")){
mDummyAlbumArt = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album);
mDummyAlbumArt2 = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album);
mDummyAlbumArt3 = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album);
}else {
Glide.with(MainActivity.context)
.load(API.imgUrl(playingSong.getString("cover_img")))
.asBitmap()
.into(new SimpleTarget<Bitmap>(100, 100) {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
mDummyAlbumArt = bitmap; …
Run Code Online (Sandbox Code Playgroud) notifications android remoteview lockscreenwidget android-glide
我有一个RecyclerView
,每个项目RecyclerView
都有ImageView
.我正在ImageView
使用Glide加载图像,当我向下滚动RecyclerView
它加载图像时这很好,但是当我再次向上srcoll RecyclerView
它再次加载那些已经加载的图像.我不想再次加载已经加载的图像.
我使用以下代码使用Glide加载图像
Glide.with(mActivity)
.load(img.getmGridViewImageUrl())
.into(imageHolder.imageView);
Run Code Online (Sandbox Code Playgroud) 我有一个Fragment
有RecyclerView
.
在这里RecyclerView
,我偶尔可以下载并显示图像(加载Glide到ImageView
.
因此,当我打开时Fragment
,使用过的内存有时会从大约30MB跳到大约100MB甚至更多.
在Activity
持有Fragment
完成之后,内存不会释放.它和以前一样.
我检查滑翔文档,显然我们不必担心释放Bitmaps
在RecyclerView
.这是一个很大的问题,因为应用程序经常因为OOM而崩溃.
Fragment
删除后我应该如何正确处理释放内存?
编辑:另一个观察
我注意到的另一件事是,如果我完成了Activity
,然后Activity
再次开始相同.内存将跳回一段时间然后再回到100MB,这让我相信在Fragment
再次启动之前内存已被清除.
现在我Glide-library
用来加载Android Wear中的图像.它大多数时间都不会加载图像.但是,它有时会加载图像.不知道我的代码出了什么问题.
注意 Wear通过蓝牙连接到设备,我JSON
通过Broadcast Receiver
移动设备成功获得Android Wear中Webservice的响应.除图像外,所有数据均在磨损状态下正确显示.
Glide.with(mContext)
.load("http://www.hanamoflorist.ca/images/uploads/Spring5InchesCubeVaseArrangement$45.00.jpg")
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.e("exception in image", "" + e);
Toast.makeText(mContext, "" + e, Toast.LENGTH_LONG).show();
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
}).error(R.drawable.ic_placeholder_image)
.into(((ItemViewHolder) holder).ivCardImage);
Run Code Online (Sandbox Code Playgroud) 我正在尝试将自定义模型加载到Glide中但收到此错误:
GlideExecutor:请求抛出未捕获的throwable com.bumptech.glide.Registry $ NoModelLoaderAvailableException:无法找到模型的任何ModelLoaders:com.company.project.glide.Movie@aac331a
滑翔版:4.0.0
模型
public class Movie {
private String name;
private String artist;
public Movie(String name, String artist) {
this.name = name;
this.artist = artist;
}
public String getName() {
return name;
}
public String getArtist() {
return artist;
}
}
Run Code Online (Sandbox Code Playgroud)
模
@com.bumptech.glide.annotation.GlideModule
public class GlideModule extends AppGlideModule {
@Override
public boolean isManifestParsingEnabled() {
return false;
}
@Override
public void applyOptions(Context context, GlideBuilder builder) {
super.applyOptions(context, builder);
}
@Override
public void registerComponents(Context context, Registry …
Run Code Online (Sandbox Code Playgroud) 我有一个Activity
在其中下载图像的zip文件然后解压缩getFilesDir()
.路径是这样的:
/data/user/0/packagename/files/files/example.png
但是,当我尝试加载这些图像时,它们没有显示.我正在使用此代码获取路径并加载图像:
String loc = getFilesDir().getPath() + "/" + Config.IMAGES_LOCATION +"/";
String imageloc = loc + model.getThumbnail();
Glide.with(ActivityImageGallery.this).load(imageloc).into(image);
Run Code Online (Sandbox Code Playgroud)
imageloc路径与保存位置相同,并且从路径创建文件时,它显示它将存在.
我尝试file://
在路径前使用,但这也不起作用.WRITE_EXTERNAL
en READ_EXTERNAL
权限被询问并被授予.
我对android中图像的处理有很多疑问,我希望看看你是否可以解决它们.
此时我的图像占用320 dp高,match_parent宽度约占屏幕的60%.这个载有Glide的图像,1080中的一些图像,我个人.
我试图制作centroCrop和fitXY,但总是使图像变形.我所知道的第一种类型会切割图像,但第二种类型适合大小,但它会使图像变高或变宽.
有没有办法,用Glide插入并看到它是什么?我可以在ImageView和Glide中使用哪些属性?
<ImageView
android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layout_collapseMode="parallax"
android:scaleType="fitXY"
app:layout_scrollFlags="scroll|enterAlways" />
Run Code Online (Sandbox Code Playgroud)
提前致谢.
好吧,我正在研究 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 ×10
android-glide ×10
bitmap ×1
bluetooth ×1
imageview ×1
remoteview ×1
resize ×1
textureview ×1
wear-os ×1