(一)Glide的初次使用

Glide的初次使用

大部分内容借鉴于:https://mrfu.me/2016/02/28/Glide_Exceptions-_Debugging_and_Error_Handling/

一.在Android studio中配置

`compile 'com.github.bumptech.glide:glide:3.6.1'`

二.加载图片资源

1.从Android资源中加载

2.从文件中加载

3.从Uri中加载

代码如下:

//从各种途径获取图片
    public void loadImageView(){
        //资源id
        Glide.with(this).load(resourceId).into(ivPic);
        //文件
        File file = new File("/storage/emulated/0/Download", "a.jpg");
        Glide.with(this).load(file).into(ivPic);
        //uri
        Uri uri = resourceIdToUri(this, R.drawable.a);
        Glide.with(this).load(uri).into(ivPic);
    }
public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FOREWARD_SLASH = "/";
private static Uri resourceIdToUri(Context context, int resourceId) {
    return Uri.parse(ANDROID_RESOURCE + context.getPackageName() +              FOREWARD_SLASH + resourceId);
    }

三.在listview或者gridview中使用

Glide .with(context) .load(imageUrls[position]) .into((ImageView) convertView);
处理方式没有变化。

四.占位符和渐变动画

1.占位符(默认显示图片)

placeholder(R.mipmap.ic_launcher)

2.错误占位符(当网址错误,或其他原因显示不出来图片时)

.error(R.mipmap.future_studio_launcher) 

3.渐变动画(淡入淡出效果,默认是300毫秒,当然后边会有自定义动画)

crossFade()
crossFade(int durtion)

4.不想要任何动画效果(请确保有更好的理由不要动画)

dontAnimate()

五.图片重设大小与缩放

1.重设图片大小

dontAnimate()

2缩放图像(两种模式)

(1)CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。

(2)fitCenter() 是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。

六.显示Gif和Video

1.gif检查(如果发现网址不是一个gif,会调用error())

asGif()

2.Gif转为Bitmap

asBitmap()

3.显示本地视频

String ilePath = "/storage/emulated/0/Pictures/example_video.mp4";  Glide .with( context ) .load( Uri.fromFile( new File( filePath ) ) ) .into( imageViewGifAsBitmap );

七.缓存基础

1.内存缓存(默认缓存到磁盘,不影响我们再次进入应用从磁盘中拿图片)

skipMemoryCache( true )

2.跳过磁盘缓存

diskCacheStrategy( DiskCacheStrategy.NONE )

他共有四种模式

DiskCacheStrategy.NONE 什么都不缓存,就像刚讨论的那样
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像。在我们上面的例子中,将会只有一个 1000x1000 像素的图片
DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即,降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)

八.图片请求的优先级

  1. priority(Priority.LOW) (只是建议,和广播传递差不多)
  2. 共有四个枚举类型

    Priority.LOW

    Priority.NORMAL

    Priority.HIGH

    Priority.IMMEDIATE

九.缩略图

1.简单缩略图

thumbnail( 0.1f )

2.新建请求拿到缩略图

// 再开一个请求去加载缩略图
private DrawableRequestBuilder<String> thumbnailRequest;
    private void loadImageThumbnailRequest() {
        // setup Glide request without the into() method
        Hospital hospital = (Hospital) lists.get(lists.size() - 3);
        thumbnailRequest = Glide.with(context).load(hospital.getPicId());
}

十.回调:SimpleTarget 和 ViewTarget 用于自定义视图类

1.当我们需要bitmap对象时。(还需要添加一句.asBitmap())

// 变成bitmap对象,可以指定大小,默认和imageview大小一致
        SimpleTarget target = new SimpleTarget<Bitmap>(250,500) {
            @Override
            public void onResourceReady(Bitmap bitmap,
                    GlideAnimation glideAnimation) {
                // do something with the bitmap
                // for demonstration purposes, let's just set it to an ImageView
                viewHolder.imageView.setImageBitmap(bitmap);
            }
};

2.当我们的图片加载不只是在activity中出现的话。

context.getApplicationContext()可能更加安全

3.使用ViewTarget将图片放置进自定义控件中

//将图片传到自定义布局中
@SuppressWarnings("unchecked")
    private void loadImageViewTarget() {  
MyCustomView customView = (MyCustomView) findViewById( R.id.custom_view );

   ViewTarget<MyCustomView, GlideDrawable> viewTarget = new ViewTarget<MyCustomView, GlideDrawable>( customView ) {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
this.view.setImage( resource.getCurrent() );
}
};
Glide
.with( this.getApplicationContext() ) // safer!
.load( eatFoodyImages[0] )
.into( viewTarget );
 }

十一.加载图片到通知栏和应用小部件中

1.。。//自定义通知
@SuppressLint(“NewApi”)
public void startNotification(){
final RemoteViews rv = new RemoteViews(this.getPackageName(), R.layout.remote_notification);

rv.setImageViewResource(R.id.remoteview_notification_icon, R.drawable.a);

rv.setTextViewText(R.id.remoteview_notification_headline, "Title");  
rv.setTextViewText(R.id.remoteview_notification_short_message, "content");

// build notification
NotificationCompat.Builder mBuilder =  
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Content Title")
.setContentText("Content Text")
.setContent(rv)
.setPriority( NotificationCompat.PRIORITY_MIN);

final Notification notification = mBuilder.build();

// set big content view for newer androids
if (android.os.Build.VERSION.SDK_INT >= 16) {  
notification.bigContentView = rv;
}

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);  
mNotificationManager.notify(0, notification);  

notificationTarget = new NotificationTarget(  
    this,
    rv,
    R.id.remoteview_notification_icon,
    notification,
    0);

}

2.。。。//自定义桌面小控件
三个xml,一个class
public class FSAppWidgetProvider extends AppWidgetProvider {

private AppWidgetTarget appWidgetTarget;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
 int[] appWidgetIds) {

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.custom_layout);

appWidgetTarget = new AppWidgetTarget( context, rv, R.id.custom_view, appWidgetIds );

Glide
.with( context.getApplicationContext() ) // safer!
.load( MainActivity.eatFoodyImages[3] )
.asBitmap()
.into( appWidgetTarget );

pushWidgetUpdate(context, rv);
}

public static void pushWidgetUpdate(Context context, RemoteViews rv) {
ComponentName myWidget = new ComponentName(context, FSAppWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, rv);
}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值