使用Android Glide技术实现图片加载和播放视频

使用Android Glide技术实现图片加载和播放视频,第1张

Glide特点
使用简单
可配置度高,自适应程度高
支持常见图片格式 Jpg png gif webp
支持多种数据源 网络、本地、资源、Assets 等
高效缓存策略 支持Memory和Disk图片缓存 默认Bitmap格式采用 - RGB_565内存使用至少减少一半
生命周期集成 根据Activity/Fragment生命周期自动管理请求
高效处理Bitmap 使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力

本文主要说明用此技术实现图片加载和播放视频

1.在listview或者recycleView中使用
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            //.....
        }
        Glide
            .with(context)
            .load(imageUrls[position])
            .into(holder.imageView);
        return convertView;
    }

recycleView中可以在Adapter的onBindViewHolder方法中使用。

建议with()传参的时候传递Activity 和 Fragment给Glide,而不是Context。将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。

2.设置加载网络时等待的
Glide
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .placeholder(R.mipmap.ic_launcher) // can also be a drawable
    .into(imageViewPlaceholder);
3.设置加载失败后的图片显示
Glide
    .with(context)
    .load("http://www.kaotop.com/file/tupian/20220518/non_existing_image.png")
    .error(R.mipmap.future_studio_launcher) // will be displayed if the image cannot be loaded
    .into(imageViewError);
4.设置图片的缩放
//使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的
//Height是match_parent则图片就会被拉伸填充
Glide.with(MainActivity.this)
                    .load(args[position])
                    .centerCrop()
                    .into(holder.imageView);
//使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围
//该图像将会完全显示,但可能不会填满整个 ImageView。
Glide.with(MainActivity.this)
                    .load(args[position])
                    .fitCenter()
                    .into(holder.imageView);
5.加载gif动画
Glide  
    .with( context )
    .load( gifUrl )
    .asGif() //判断加载的url资源是否为gif格式的资源
    .error( R.drawable.full_cake )
    .into( imageViewGif );
6.显示本地视频
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide  
    .with( context )
    .load( Uri.fromFile( new File( filePath ) ) )
    .into( imageViewGifAsBitmap );
7.设置glide的缓存策略
Glide  
    .with( context )
    .load( Images[0] )
    .skipMemoryCache( true ) //跳过内存缓存
    .into( imageViewInternet );
Glide  
    .with( context )
    .load( images[0] )
    .diskCacheStrategy( DiskCacheStrategy.NONE ) //跳过硬盘缓存
    .into( imageViewInternet );
DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)
8.不将加载的资源放入ImageView而是获取资源的Bitmap对象:
//括号中的300,600代表宽和高但是未有作用
SimpleTarget target = new SimpleTarget<Bitmap>(300,600) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    //在这里对返回的bitmap进行处理
                }
            };
            Glide.with(MainActivity.this)
                    .load(args[position])
                    .asBitmap()
                    .into(target);

注:在列表中使用gilde的时候,会出现图片变形的情况,当刷新的时候才会正常显示,这个问题就是因为动画加载的过程中图片还没有下载下来导致的,这个时候把动画给禁止了就可以了,也可以把加载失败时候的图片给禁止掉,这样就可以直接加载出图片了,但是图片一定要可以下载下来.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存