美文网首页图片
Glide入门教程——21.如何旋转图片

Glide入门教程——21.如何旋转图片

作者: 签到钱就到 | 来源:发表于2016-05-16 19:48 被阅读2189次

    Glide — 如何旋转图片

    原文:How to Rotate Images
    作者:Norman Peitek
    翻译:Dexter0218

    不久前,我们有一个问题:如何用Glide旋转图像,由于Picasso提供此即学即用的功能。不幸的是,Glide不提供这一点方法调用,但在这个博客文章中,我们将展示如何几乎一样容易地使它。
    如果您需要更多Glide的内容,浏览我们博客文章列表上的主题:

    Glide 系列概览

    1. 入门简介
    2. 高级加载
    3. 适配器(ListView, GridView)
    4. 占位图& 淡入淡出动画
    5. 图片大小 & 缩放
    6. 播放GIF & 视频
    7. 缓存基础
    8. 请求优先级
    9. 缩略图
    10. 回调:定制view中使用SimpleTarget和ViewTarget
    11. 通知栏和桌面小控件的图片加载
    12. 异常: 调试和报错处理
    13. 自定义变换
    14. 用animate()定制动画
    15. 整合网络协议栈
    16. 用Modules定制Glide
    17. Glide Module 案例: 接受自签名HTTPS证书
    18. Glide Module 案例: 自定义缓存
    19. Glide Module 案例: 通过加载自定义大小图片优化
    20. 动态使用 Model Loaders
    21. 如何旋转图片
    22. 系列综述

    如何用Glide旋转图片

    实际上android.graphics.Matrix类正好提供了我们需要的。旋转图片的代码实际上非常直截了当:

    Bitmap toTransform = ... // your bitmap source
    
    Matrix matrix = new Matrix();  
    matrix.postRotate(rotateRotationAngle);
    
    Bitmap.createBitmap(toTransform, 0, 0, toTransform.getWidth(), toTransform.getHeight(), matrix, true);  
    

    为了让它对我们更有用,特别是在使用Glide的情况下,我们在一个BitmapTransformation里包装它:

    public class RotateTransformation extends BitmapTransformation {
    
        private float rotateRotationAngle = 0f;
    
        public RotateTransformation(Context context, float rotateRotationAngle) {
            super( context );
    
            this.rotateRotationAngle = rotateRotationAngle;
        }
    
        @Override
        protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
            Matrix matrix = new Matrix();
    
            matrix.postRotate(rotateRotationAngle);
    
            return Bitmap.createBitmap(toTransform, 0, 0, toTransform.getWidth(), toTransform.getHeight(), matrix, true);
        }
    
        @Override
        public String getId() {
            return "rotate" + rotateRotationAngle;
        }
    }
    

    如果你还没有明白这个类里发生了什么,回顾看一下在自定义变换那篇文章的介绍,你会看到你需要知道的东西。

    最后,我们看看新变换的几个例子:

    private void loadImageOriginal() {  
        Glide
            .with( context )
            .load( eatFoodyImages[0] )
            .into( imageView1 );
    }
    
    private void loadImageRotated() {  
        Glide
            .with( context )
            .load( eatFoodyImages[0] )
            .transform( new RotateTransformation( context, 90f ))
            .into( imageView3 );
    }
    

    当然,你可以改变第二个参数去设置要被旋转多少角度。你可以动态地设置它!

    你需要用Glide旋转图像,这里提供所有的代码和知识,即使它没有在库里直接提供。如果这对你有用,我们会对你在下面友好评论表示感激!

    相关文章

      网友评论

      • 462191cfd704:为什么Glide没有transform()方法?
      • 小毛驴_71f8:二楼正解,matrix旋转有黑框,我是没解决掉,最后用的canvas旋转的
      • leilifengxingmw:可以。有钱了,打赏100块。
      • 74cea691617f:几乎所有的Glide旋转图片网上都是这个方法,大家都抄来抄去的,但是这个方法有个问题,不知作者发现了没有,如果旋转角度不是90的倍数,旋转后的图片会有一个很难看的黑色背景,作者知道怎么解决吗?
        74cea691617f:@签到钱就到 谢谢作者指导,我试试看~~
        签到钱就到: @wy521angel 旋转是用矩阵的方式的,矩阵有默认值,默认值是黑色的,旋转后没有图片的位置就是用这个默认值填充的,所以,如果要变其他颜色,我觉得应该在matrix那边想想办法,初始化时设置个想要的颜色值。

      本文标题: Glide入门教程——21.如何旋转图片

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