美文网首页@IT·互联网
Android开源框架Glide的使用

Android开源框架Glide的使用

作者: shenlong77 | 来源:发表于2017-04-13 20:41 被阅读0次

    Gilde是google官方推荐的加载图片和视频的库。
    可以加载本地图片和远程图片。
    可以加载图片,动图,视频。

    添加依赖包

    首先需要在工程中app目录下,build.gradle添加依赖包

    dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:19.1.0'
    }
    

    加载远程图片

    1 在layout中定义ImageView

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="300sp"
        android:layout_height="300sp" />
    

    2 获取ImageView

    private ImageView imageView;
    imageView=(ImageView)findViewById(R.id.imageView);
    

    3 开始用Glide加载网络图片,图片放在ImageView中显示

    //加载网络图片,在load中传入url
    Glide.with(this) //设置关联的context,可以为Activity,FragmentFragmentActivity,Contecxt
            .load
    ("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")//加载网络图片
            .into(imageView);//设置图片显示在哪个ImageView里
    

    加载本地图片

    1 同样是定义和获取ImageView
    2 得到存储图片的文件,可以是FIle类型,也可以是Uri类型,如下两种形式

    //找到根目录下的Pictures文件夹
    File file = new File(Environment.getExternalStorageDirectory(),"Pictures");
    //判断该文件是否存在,如果不存在,则新建一个文件的路径,即建立了和上面对应的文件夹
     if(!file.exists())
    {
        file.mkdirs();
    }
    //获取图片文件
    File imgFile=new File(file,"/Screenshots/aaa.png");
    //获取图片的Uri
    Uri imgUri=Uri.fromFile(imgFile);
    

    3 用Glide加载本地图片
    如果用File类型传入

    //加载本地图片,在load中传入文件名
    Glide.with(this) //设置关联的context,可以为Activity,Fragment,FragmentActivity,Contecxt
           .load(imgFile);//加载本地图片
           .into(imageView);//设置图片显示在哪个ImageView里
    

    如果用Uri类型传入

    //加载本地图片,在load中传入文件名
    Glide.with(this) //设置关联的context,可以为Activity,Fragment,FragmentActivity,Contecxt
           .load(imgUri);//加载本地图片
           .into(imageView);//设置图片显示在哪个ImageView里
    

    加载动图

    1 传入动图的本地或者网络地址
    2 只需要在load()后面加上asGif()即可

    Glide.with(this)
             .load("gif地址")
             .asGif()
             .into(imageView)
    

    把动图变成静态图显示

    1 地址是动图的地址
    2 load()后不用asGif()换成asBitmap()

    Glide.with(this)
             .load("gif地址")
             .asBitmap()
             .into(imageView)
    

    设置加载时,加载失败时的显示

    Glide.with(this)
             .load("")
             .crossFade()//设置加载时的动画
             .error(R.mipmap.ic_launcher)//传入图片的资源文件,设置加载失败时显示的图片
             .placeholder(R.mipmap.ic_launcher)//传入图片的资源文件,设置加载中显示的图片
             .into(imageView);
    

    crossFade(),error,placeholder必须在with,load,asGif之后使用,在into之前使用,用asBitmap时,不能使用crossFade()

    crossFade()有几种重载的方法
    crossFade(int duration):设置时间
    crossFade(Animation animation, int duration):设置自定义的动画和时间
    crossFade(int animationId, int duration): 加载动画资源和时间 
    

    图片和动图的压缩

    override(int width,int length)根据传入的参数将图片变成width*length像素的图片
    1

    override(int width,int length)与 fitCenter()结合
    将压缩后的图片等比例放大或缩小填充整个ImageView
    

    2

    override(int width,int length)与centerCrop()结合
    将压缩后的图片等比例放大或缩小,直到告诉和ImageView的告诉重合。
    

    将图片转为Bitmap类型,并保存

     private ImageView imageView;
     private Bitmap bitmap;
     new Thread(new Runnable() {
     @Override
     public void run() {
     File file = new File(Environment.getExternalStorageDirectory(),"Pictures");
     //判断该文件是否存在,如果不存在,则新建一个文件的路径,即建立了和上面对应的文件夹
    if(!file.exists())
    {
    file.mkdirs();
    }
    try {
    bitmap= Glide.with(MainActivity.this)
                          .load("http://img.zcool.cn/community/01d1105541b28b000001a64b90e09b.jpg")
                          .asBitmap()//转化为bitmap类型
                          .into(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL)//设置接收图片的像素,可以传入两个int类型,这里是保留原像素
                          .get();//得到图片
                          //获取图片文件
    File imgFile=new File(file,"b.png");
    FileOutputStream fileOutputStream=new FileOutputStream(imgFile);
    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(fileOutputStream);
    //compress方法将bitmap转化为特定格式的图片,可以压缩,并添加到输出流
    //传入三个参数,输出图片格式,压缩率,0到100,输出文件流
    bitmap.compress(Bitmap.CompressFormat.JPEG,100,bufferedOutputStream);
    //关闭并提交文件流
    bufferedOutputStream.close();
    } catch (InterruptedException e) {
    e.printStackTrace();
    } catch (ExecutionException e) {
    e.printStackTrace();
    }
    catch (IOException e)
    {
     e.printStackTrace();
    }
    }
    }).start();
    

    相关文章

      网友评论

        本文标题:Android开源框架Glide的使用

        本文链接:https://www.haomeiwen.com/subject/ijliattx.html