标签: android-glide

Android Glide:如何下载和缓存位图?

我正在使用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 image-caching android-glide

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

如何在TextureView上绘制位图

我正试图在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)

android bitmap textureview android-glide

10
推荐指数
0
解决办法
6261
查看次数

如何在remoteViews中使用Glide?

我正在使用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

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

每次滚动recyclerview时滑动加载图像

我有一个RecyclerView,每个项目RecyclerView都有ImageView.我正在ImageView使用Glide加载图像,当我向下滚动RecyclerView它加载图像时这很好,但是当我再次向上srcoll RecyclerView它再次加载那些已经加载的图像.我不想再次加载已经加载的图像.

我使用以下代码使用Glide加载图像

Glide.with(mActivity)
                .load(img.getmGridViewImageUrl())
                .into(imageHolder.imageView);
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview android-glide

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

删除片段后内存不会释放

我有一个FragmentRecyclerView.

在这里RecyclerView,我偶尔可以下载并显示图像(加载GlideImageView.

因此,当我打开时Fragment,使用过的内存有时会从大约30MB跳到大约100MB甚至更多.

Activity持有Fragment完成之后,内存不会释放.它和以前一样.

我检查滑翔文档,显然我们不必担心释放BitmapsRecyclerView.这是一个很大的问题,因为应用程序经常因为OOM而崩溃.

Fragment删除后我应该如何正确处理释放内存?

编辑:另一个观察

我注意到的另一件事是,如果我完成了Activity,然后Activity再次开始相同.内存将跳回一段时间然后再回到100MB,这让我相信在Fragment再次启动之前内存已被清除.

android android-fragments android-memory android-glide

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

如何在android中加载URL图像?

现在我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)

android bluetooth android-glide wear-os

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

com.bumptech.glide.Registry $ NoModelLoaderAvailableException:找不到任何ModelLoaders

我正在尝试将自定义模型加载到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)

android android-glide

10
推荐指数
2
解决办法
4759
查看次数

Glide无法从内部存储加载文件

我有一个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_EXTERNALen READ_EXTERNAL权限被询问并被授予.

android android-glide

10
推荐指数
2
解决办法
5173
查看次数

在ImageView Android中使用Glide调整图像大小

我对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)

提前致谢.

android resize imageview android-glide

10
推荐指数
4
解决办法
4万
查看次数

如何从 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
查看次数