Glide图片加载库的使用

Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大.


1.添加Glide库

需要在build.gradle中加入依赖,目前最新的版本是3.7.0,Glide库地址

<code class="language-gradle hljs bash has-numbering"> compile <span class="hljs-string">'com.github.bumptech.glide:glide:3.7.0'</span></code><ul style="" class="pre-numbering"><li>1</li></ul>

2.加载网络图片

<code class="language-java hljs  has-numbering"><span class="hljs-javadoc">/**
 * Created by mChenys on 2016/6/6.
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        String url = <span class="hljs-string">"http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"</span>;
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(url).
                asBitmap(). <span class="hljs-comment">//强制处理为bitmap</span>
                into(targetView);<span class="hljs-comment">//显示到目标View中</span>
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>

3.加载资源图片

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        <span class="hljs-keyword">int</span> resourceId = R.drawable.test;
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(resourceId).
                asBitmap().
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li></ul>

4.加载本地文件图片

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        File file = <span class="hljs-keyword">new</span> File(Environment.getExternalStorageDirectory(), <span class="hljs-string">"test.jpg"</span>);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(file).
                asBitmap().
                into(targetView);
    }
}
</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>

5.从Uri中加载

<code class="language-java hljs  has-numbering"><span class="hljs-javadoc">/**
 * Created by mChenys on 2016/6/6.
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Uri uri = Uri.parse(<span class="hljs-string">"android.resource://"</span> + <span class="hljs-keyword">this</span>.getPackageName() + <span class="hljs-string">"/"</span> + R.drawable.test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(uri).
                asBitmap().
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>

6.加载gif图片

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.smail).
                asGif().<span class="hljs-comment">//注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断.</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>

效果图:
这里写图片描述


7.设置默认图片和加载失败时显示的图片

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                asBitmap().
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>

8.淡入显示效果

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade().<span class="hljs-comment">//淡入显示,注意:如果设置了这个,则必须要去掉asBitmap</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>

另外,crossFade还可以接收一个参数来设置淡入显示效果的持续时间,crossFade(int duration);
如果你想直接显示图片,而不是淡入显示图片,则可以通过dontAnimate()方法设置.


9.调整图片像素大小

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade(<span class="hljs-number">1000</span>).<span class="hljs-comment">//淡入显示的时间,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>,<span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>

10.设置CenterCrop,FitCenter

CenterCrop,FitCenter都是对目标图片进行裁剪,了解过ImageView的ScaleType属性就知道,这2种裁剪方式在ImageView上也是有的,分别对应ImageView的ImageView.ScaleType.CENTER_CROP和mageView.ScaleType.FIT_CENTER的.

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade(<span class="hljs-number">1000</span>).<span class="hljs-comment">//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>,<span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                centerCrop().<span class="hljs-comment">//中心裁剪,缩放填充至整个ImageView</span>
                into(targetView);
    }
}
</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li></ul>

11.缓存策略设置

内存缓存设置,通过skipMemoryCache(boolean)来设置是否需要缓存到内存,默认是会缓存到内存的.

<code class="language-java hljs  has-numbering"><span class="hljs-javadoc">/**
 * Created by mChenys on 2016/6/6.
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade(<span class="hljs-number">1000</span>).<span class="hljs-comment">//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>,<span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                centerCrop().<span class="hljs-comment">//中心裁剪,缩放填充至整个ImageView</span>
                skipMemoryCache(<span class="hljs-keyword">true</span>).<span class="hljs-comment">//跳过内存缓存</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li></ul>

磁盘缓存,磁盘缓存通过diskCacheStrategy(DiskCacheStrategy)来设置,DiskCacheStrategy一共有4种模式:

  1. DiskCacheStrategy.NONE:什么都不缓存
  2. DiskCacheStrategy.SOURCE:仅缓存原图(全分辨率的图片)
  3. DiskCacheStrategy.RESULT:仅缓存最终的图片,即修改了尺寸或者转换后的图片
  4. DiskCacheStrategy.ALL:缓存所有版本的图片,默认模式
<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade(<span class="hljs-number">1000</span>).<span class="hljs-comment">//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>, <span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                centerCrop().<span class="hljs-comment">//中心裁剪,缩放填充至整个ImageView</span>
                skipMemoryCache(<span class="hljs-keyword">true</span>).<span class="hljs-comment">//跳过内存缓存</span>
                diskCacheStrategy(DiskCacheStrategy.RESULT).<span class="hljs-comment">//保存最终图片</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul>

12.缓存设置

在GlideModule 中,我们可以设置磁盘缓存的位置,磁盘缓存的大小和内存缓存的大小,同时还可以设置图片的显示质量.

要是用GlideModule ,需要创建它的实现类,然后在manifests中申明实现类的全类路径:

<code class="language-xml hljs  has-numbering">  <span class="hljs-tag"><<span class="hljs-title">meta-data
</span>            <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"com.example.mchenys.httputilsdemo.image.glide.module.SimpleGlideModule"</span>
            <span class="hljs-attribute">android:value</span>=<span class="hljs-value">"GlideModule"</span> /></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li></ul>

GlideModule 的实现类,需要实现applyOptions方法:

<code class="language-java hljs  has-numbering"><span class="hljs-javadoc">/**
 * 所以你知道要创建一个额外的类去定制 Glide。
 * 下一步是要全局的去声明这个类,让 Glide 知道它应该在哪里被加载和使用。
 * Glide 会扫描 AndroidManifest.xml 为 Glide module 的 meta 声明。
 * 因此,你必须在 AndroidManifest.xml 的 <application> 标签内去声明这个SimpleGlideModule。
 * Created by mChenys on 2016/6/10.
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SimpleGlideModule</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">GlideModule</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> DiskCache cache;

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">applyOptions</span>(Context context, GlideBuilder builder) {
        <span class="hljs-comment">// 在 Android 中有两个主要的方法对图片进行解码:ARGB8888 和 RGB565。前者为每个像素使用了 4 个字节,</span>
        <span class="hljs-comment">// 后者仅为每个像素使用了 2 个字节。ARGB8888 的优势是图像质量更高以及能存储一个 alpha 通道。</span>
        <span class="hljs-comment">// Picasso 使用 ARGB8888,Glide 默认使用低质量的 RGB565。</span>
        <span class="hljs-comment">// 对于 Glide 使用者来说:你使用 Glide module 方法去改变解码规则。</span>
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        <span class="hljs-comment">//设置缓存目录</span>
        File cacheDir = PathUtils.getDiskCacheDir(context, CacheConfig.IMG_DIR);

        cache = DiskLruCacheWrapper.get(cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);<span class="hljs-comment">// 250 MB </span>
        builder.setDiskCache(<span class="hljs-keyword">new</span> DiskCache.Factory() {
            <span class="hljs-annotation">@Override</span>
            <span class="hljs-keyword">public</span> DiskCache <span class="hljs-title">build</span>() {
                <span class="hljs-keyword">return</span> cache;
            }
        });
        <span class="hljs-comment">//设置memory和Bitmap池的大小</span>
        MemorySizeCalculator calculator = <span class="hljs-keyword">new</span> MemorySizeCalculator(context);
        <span class="hljs-keyword">int</span> defaultMemoryCacheSize = calculator.getMemoryCacheSize();
        <span class="hljs-keyword">int</span> defaultBitmapPoolSize = calculator.getBitmapPoolSize();

        <span class="hljs-keyword">int</span> customMemoryCacheSize = (<span class="hljs-keyword">int</span>) (<span class="hljs-number">1.2</span> * defaultMemoryCacheSize);
        <span class="hljs-keyword">int</span> customBitmapPoolSize = (<span class="hljs-keyword">int</span>) (<span class="hljs-number">1.2</span> * defaultBitmapPoolSize);

        builder.setMemoryCache(<span class="hljs-keyword">new</span> LruResourceCache(customMemoryCacheSize));
        builder.setBitmapPool(<span class="hljs-keyword">new</span> LruBitmapPool(customBitmapPoolSize));
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">registerComponents</span>(Context context, Glide glide) {
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li></ul>

13.设置图片请求的优先级

Glide 可以用 Priority 枚举来设置图片的加载优先级,这样我们就可以针对那些需要显示的图片设置高的优先级了.
Priority 有4种级别:
Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE
例如:

<code class="language-java hljs  has-numbering"> <span class="hljs-javadoc">/**
     * 高优先级加载
     *<span class="hljs-javadoctag"> @param</span> url
     *<span class="hljs-javadoctag"> @param</span> imageView
     *<span class="hljs-javadoctag"> @param</span> listener
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">loadImageWithHighPriority</span>(Object url,ImageView imageView, <span class="hljs-keyword">final</span> LoaderListener listener) {
        <span class="hljs-keyword">if</span> (url == <span class="hljs-keyword">null</span>) {
            <span class="hljs-keyword">if</span> (listener != <span class="hljs-keyword">null</span>) {
                listener.onError();
            }
        } <span class="hljs-keyword">else</span> {
            Glide.with(imageView.getContext()).
                    load(url).
                    asBitmap().
                    priority(Priority.HIGH).<span class="hljs-comment">//高优先级</span>
                    dontAnimate().
                    listener(<span class="hljs-keyword">new</span> RequestListener<Object, Bitmap>() {
                        <span class="hljs-annotation">@Override</span>
                        <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">onException</span>(Exception e, Object model, Target<Bitmap> target, <span class="hljs-keyword">boolean</span> isFirstResource) {
                            <span class="hljs-keyword">if</span> (<span class="hljs-keyword">null</span> != listener) {
                                listener.onError();
                            }
                            <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
                        }

                        <span class="hljs-annotation">@Override</span>
                        <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">onResourceReady</span>(Bitmap resource, Object model, Target<Bitmap> target, <span class="hljs-keyword">boolean</span> isFromMemoryCache, <span class="hljs-keyword">boolean</span> isFirstResource) {
                            <span class="hljs-keyword">if</span> (<span class="hljs-keyword">null</span> != listener) {
                                listener.onSuccess();
                            }
                            <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
                        }
                    }).into(imageView);
        }
    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li></ul>

14.设置加载缩略图

通过设置缩略图,我们可以在显示目标图片之前先展示一个第分辨率或者其他图片,当全分辨率的目标图片在后台加载完成后,
Glide会自动切换显示全像素的目标图片.

设置缩略图有2种方式:
通过thumbnail(float)指定0.0f~1.0f的原始图像大小,例如全像素的大小是500*500,如果设置为thumbnail为0.1f,即目标图片的10%,显示的缩略图大小就是50*50;

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);

        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                placeholder(R.drawable.bg_loading).<span class="hljs-comment">//加载中显示的图片</span>
                error(R.drawable.bg_error).<span class="hljs-comment">//加载失败时显示的图片</span>
                crossFade(<span class="hljs-number">1000</span>).<span class="hljs-comment">//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>, <span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                centerCrop().<span class="hljs-comment">//中心裁剪,缩放填充至整个ImageView</span>
                skipMemoryCache(<span class="hljs-keyword">true</span>).<span class="hljs-comment">//跳过内存缓存</span>
                diskCacheStrategy(DiskCacheStrategy.RESULT).<span class="hljs-comment">//保存最终图片</span>
                thumbnail(<span class="hljs-number">0.1</span>f).<span class="hljs-comment">//10%的原图大小</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li></ul>

通过thumbnail(DrawableRequestBuilder)方式来指定缩略图,该缩略图可以使用load的所有方式(网络,文件,uri,资源)加载.

<code class="language-java hljs  has-numbering">
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        <span class="hljs-comment">//缩略图请求</span>
        DrawableRequestBuilder<String> thumbnailRequest = Glide
                .with(<span class="hljs-keyword">this</span>)
                .load(<span class="hljs-string">"http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"</span>);

        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
<span class="hljs-comment">//                placeholder(R.drawable.bg_loading).//加载中显示的图片</span>
<span class="hljs-comment">//                error(R.drawable.bg_error).//加载失败时显示的图片</span>
<span class="hljs-comment">//                crossFade(1000).//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap</span>
                override(<span class="hljs-number">80</span>, <span class="hljs-number">80</span>).<span class="hljs-comment">//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高</span>
                centerCrop().<span class="hljs-comment">//中心裁剪,缩放填充至整个ImageView</span>
                skipMemoryCache(<span class="hljs-keyword">true</span>).<span class="hljs-comment">//跳过内存缓存</span>
                diskCacheStrategy(DiskCacheStrategy.RESULT).<span class="hljs-comment">//保存最终图片</span>
                thumbnail(thumbnailRequest).<span class="hljs-comment">//设置缩略图</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li></ul>

15.Transformations Bitmap

在显示目标图片之前,我们可以对目标图片的Bitmap进行相应的处理,例如::圆角图片,圆形图片,高斯模糊,旋转,灰度等等.
只需要实现Transformation接口即可,该接口的transform方法会返回显示图片前的Bitmap对象,在该方法中对
Bitmap的任何处理,都会影响到最终的显示结果.
当然,如果你只是想要对图片做常规的 bitmap 转换,你可以继承抽象类BitmapTransformation,它简化了Transformation接口的实现,这应该能覆盖大部分的应用场景了。

使用的时候,通过transform(Transformation… transformations)来设置.例如:

<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                asBitmap().
                transform(<span class="hljs-keyword">new</span> BlurTransformation(<span class="hljs-keyword">this</span>)).<span class="hljs-comment">//高斯模糊处理</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>

下面贴出常用的几个Bitmap的转换处理的代码,在github上也有glide-transformations-master库.

圆图处理
<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CropCircleTransformation</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Transformation</span><<span class="hljs-title">Bitmap</span>> {</span>

    <span class="hljs-keyword">private</span> BitmapPool mBitmapPool;

    <span class="hljs-keyword">public</span> <span class="hljs-title">CropCircleTransformation</span>(Context context) {
        <span class="hljs-keyword">this</span>(Glide.get(context).getBitmapPool());
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">CropCircleTransformation</span>(BitmapPool pool) {
        <span class="hljs-keyword">this</span>.mBitmapPool = pool;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> Resource<Bitmap> <span class="hljs-title">transform</span>(Resource<Bitmap> resource, <span class="hljs-keyword">int</span> outWidth, <span class="hljs-keyword">int</span> outHeight) {
        Bitmap source = resource.get();
        <span class="hljs-keyword">int</span> size = Math.min(source.getWidth(), source.getHeight());

        <span class="hljs-keyword">int</span> width = (source.getWidth() - size) / <span class="hljs-number">2</span>;
        <span class="hljs-keyword">int</span> height = (source.getHeight() - size) / <span class="hljs-number">2</span>;

        Bitmap bitmap = mBitmapPool.get(size, size, Bitmap.Config.ARGB_8888);
        <span class="hljs-keyword">if</span> (bitmap == <span class="hljs-keyword">null</span>) {
            bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = <span class="hljs-keyword">new</span> Canvas(bitmap);
        Paint paint = <span class="hljs-keyword">new</span> Paint();
        BitmapShader shader =
                <span class="hljs-keyword">new</span> BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
        <span class="hljs-keyword">if</span> (width != <span class="hljs-number">0</span> || height != <span class="hljs-number">0</span>) {
            <span class="hljs-comment">// source isn't square, move viewport to center</span>
            Matrix matrix = <span class="hljs-keyword">new</span> Matrix();
            matrix.setTranslate(-width, -height);
            shader.setLocalMatrix(matrix);
        }
        paint.setShader(shader);
        paint.setAntiAlias(<span class="hljs-keyword">true</span>);

        <span class="hljs-keyword">float</span> r = size / <span class="hljs-number">2</span>f;
        canvas.drawCircle(r, r, r, paint);

        <span class="hljs-keyword">return</span> BitmapResource.obtain(bitmap, mBitmapPool);
    }

    <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> String <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"CropCircleTransformation()"</span>;
    }
}
</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li></ul>
圆角处理
<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">RoundedCornersTransformation</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Transformation</span><<span class="hljs-title">Bitmap</span>> {</span>

    <span class="hljs-keyword">private</span> BitmapPool mBitmapPool;

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> radius;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> margin;

    <span class="hljs-keyword">public</span> <span class="hljs-title">RoundedCornersTransformation</span>(Context context, <span class="hljs-keyword">int</span> radius, <span class="hljs-keyword">int</span> margin) {
        <span class="hljs-keyword">this</span>(Glide.get(context).getBitmapPool(), radius, margin);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">RoundedCornersTransformation</span>(BitmapPool pool, <span class="hljs-keyword">int</span> radius, <span class="hljs-keyword">int</span> margin) {
        mBitmapPool = pool;
        <span class="hljs-keyword">this</span>.radius = radius;
        <span class="hljs-keyword">this</span>.margin = margin;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> Resource<Bitmap> <span class="hljs-title">transform</span>(Resource<Bitmap> resource, <span class="hljs-keyword">int</span> outWidth, <span class="hljs-keyword">int</span> outHeight) {
        Bitmap source = resource.get();

        <span class="hljs-keyword">int</span> width = source.getWidth();
        <span class="hljs-keyword">int</span> height = source.getHeight();

        Bitmap bitmap = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888);
        <span class="hljs-keyword">if</span> (bitmap == <span class="hljs-keyword">null</span>) {
            bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = <span class="hljs-keyword">new</span> Canvas(bitmap);
        Paint paint = <span class="hljs-keyword">new</span> Paint();
        paint.setAntiAlias(<span class="hljs-keyword">true</span>);
        paint.setShader(<span class="hljs-keyword">new</span> BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
        canvas.drawRoundRect(<span class="hljs-keyword">new</span> RectF(margin, margin, width - margin, height - margin), radius, radius,
                paint);

        <span class="hljs-keyword">return</span> BitmapResource.obtain(bitmap, mBitmapPool);
    }

    <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> String <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"RoundedTransformation(radius="</span> + radius + <span class="hljs-string">", margin="</span> + margin + <span class="hljs-string">")"</span>;
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li></ul>
灰度处理
<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GrayscaleTransformation</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Transformation</span><<span class="hljs-title">Bitmap</span>> {</span>

    <span class="hljs-keyword">private</span> BitmapPool mBitmapPool;

    <span class="hljs-keyword">public</span> <span class="hljs-title">GrayscaleTransformation</span>(Context context) {
        <span class="hljs-keyword">this</span>(Glide.get(context).getBitmapPool());
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">GrayscaleTransformation</span>(BitmapPool pool) {
        mBitmapPool = pool;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> Resource<Bitmap> <span class="hljs-title">transform</span>(Resource<Bitmap> resource, <span class="hljs-keyword">int</span> outWidth, <span class="hljs-keyword">int</span> outHeight) {
        Bitmap source = resource.get();

        <span class="hljs-keyword">int</span> width = source.getWidth();
        <span class="hljs-keyword">int</span> height = source.getHeight();

        Bitmap.Config config =
                source.getConfig() != <span class="hljs-keyword">null</span> ? source.getConfig() : Bitmap.Config.ARGB_8888;
        Bitmap bitmap = mBitmapPool.get(width, height, config);
        <span class="hljs-keyword">if</span> (bitmap == <span class="hljs-keyword">null</span>) {
            bitmap = Bitmap.createBitmap(width, height, config);
        }

        Canvas canvas = <span class="hljs-keyword">new</span> Canvas(bitmap);
        ColorMatrix saturation = <span class="hljs-keyword">new</span> ColorMatrix();
        saturation.setSaturation(<span class="hljs-number">0</span>f);
        Paint paint = <span class="hljs-keyword">new</span> Paint();
        paint.setColorFilter(<span class="hljs-keyword">new</span> ColorMatrixColorFilter(saturation));
        canvas.drawBitmap(source, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, paint);

        <span class="hljs-keyword">return</span> BitmapResource.obtain(bitmap, mBitmapPool);
    }

    <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> String <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"GrayscaleTransformation()"</span>;
    }
}
</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li></ul>
旋转处理
<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">RotateTransformation</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">BitmapTransformation</span> {</span>

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">float</span> rotateRotationAngle = <span class="hljs-number">0</span>f;

    <span class="hljs-keyword">public</span> <span class="hljs-title">RotateTransformation</span>(Context context, <span class="hljs-keyword">float</span> rotateRotationAngle) {
        <span class="hljs-keyword">super</span>(context);

        <span class="hljs-keyword">this</span>.rotateRotationAngle = rotateRotationAngle;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> Bitmap <span class="hljs-title">transform</span>(BitmapPool pool, Bitmap toTransform, <span class="hljs-keyword">int</span> outWidth, <span class="hljs-keyword">int</span> outHeight) {
        Matrix matrix = <span class="hljs-keyword">new</span> Matrix();

        matrix.postRotate(rotateRotationAngle);

        <span class="hljs-keyword">return</span> Bitmap.createBitmap(toTransform, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, toTransform.getWidth(), toTransform.getHeight(), matrix, <span class="hljs-keyword">true</span>);
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> String <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"rotate"</span> + rotateRotationAngle;
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>
高斯模糊处理
<code class="hljs cs has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> BlurTransformation implements Transformation<Bitmap> {

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> MAX_RADIUS = <span class="hljs-number">25</span>;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> DEFAULT_DOWN_SAMPLING = <span class="hljs-number">1</span>;

    <span class="hljs-keyword">private</span> Context mContext;
    <span class="hljs-keyword">private</span> BitmapPool mBitmapPool;

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> mRadius;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> mSampling;

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context) {
        <span class="hljs-keyword">this</span>(context, Glide.<span class="hljs-keyword">get</span>(context).getBitmapPool(), MAX_RADIUS, DEFAULT_DOWN_SAMPLING);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context, BitmapPool pool) {
        <span class="hljs-keyword">this</span>(context, pool, MAX_RADIUS, DEFAULT_DOWN_SAMPLING);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context, BitmapPool pool, <span class="hljs-keyword">int</span> radius) {
        <span class="hljs-keyword">this</span>(context, pool, radius, DEFAULT_DOWN_SAMPLING);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context, <span class="hljs-keyword">int</span> radius) {
        <span class="hljs-keyword">this</span>(context, Glide.<span class="hljs-keyword">get</span>(context).getBitmapPool(), radius, DEFAULT_DOWN_SAMPLING);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context, BitmapPool pool, <span class="hljs-keyword">int</span> radius, <span class="hljs-keyword">int</span> sampling) {
        mContext = context;
        mBitmapPool = pool;
        mRadius = radius;
        mSampling = sampling;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">BlurTransformation</span>(Context context, <span class="hljs-keyword">int</span> radius, <span class="hljs-keyword">int</span> sampling) {
        mContext = context;
        mBitmapPool = Glide.<span class="hljs-keyword">get</span>(context).getBitmapPool();
        mRadius = radius;
        mSampling = sampling;
    }

    @Override
    <span class="hljs-keyword">public</span> Resource<Bitmap> <span class="hljs-title">transform</span>(Resource<Bitmap> resource, <span class="hljs-keyword">int</span> outWidth, <span class="hljs-keyword">int</span> outHeight) {
        Bitmap source = resource.<span class="hljs-keyword">get</span>();

        <span class="hljs-keyword">int</span> width = source.getWidth();
        <span class="hljs-keyword">int</span> height = source.getHeight();
        <span class="hljs-keyword">int</span> scaledWidth = width / mSampling;
        <span class="hljs-keyword">int</span> scaledHeight = height / mSampling;

        Bitmap bitmap = mBitmapPool.<span class="hljs-keyword">get</span>(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
        <span class="hljs-keyword">if</span> (bitmap == <span class="hljs-keyword">null</span>) {
            bitmap = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = <span class="hljs-keyword">new</span> Canvas(bitmap);
        canvas.scale(<span class="hljs-number">1</span> / (<span class="hljs-keyword">float</span>) mSampling, <span class="hljs-number">1</span> / (<span class="hljs-keyword">float</span>) mSampling);
        Paint paint = <span class="hljs-keyword">new</span> Paint();
        paint.setFlags(Paint.FILTER_BITMAP_FLAG);
        canvas.drawBitmap(source, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, paint);

        <span class="hljs-keyword">if</span> (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            <span class="hljs-keyword">try</span> {
                bitmap = RSBlur.blur(mContext, bitmap, mRadius);
            } <span class="hljs-keyword">catch</span> (RSRuntimeException e) {
                bitmap = FastBlur.blur(bitmap, mRadius, <span class="hljs-keyword">true</span>);
            }
        } <span class="hljs-keyword">else</span> {
            bitmap = FastBlur.blur(bitmap, mRadius, <span class="hljs-keyword">true</span>);
        }

        <span class="hljs-keyword">return</span> BitmapResource.obtain(bitmap, mBitmapPool);
    }

    @Override <span class="hljs-keyword">public</span> String <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"BlurTransformation(radius="</span> + mRadius + <span class="hljs-string">", sampling="</span> + mSampling + <span class="hljs-string">")"</span>;
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li></ul>

网上提供的FastBlur,可兼容低版本的高斯模糊处理

<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FastBlur</span> {</span>

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Bitmap <span class="hljs-title">blur</span>(Bitmap sentBitmap, <span class="hljs-keyword">int</span> radius, <span class="hljs-keyword">boolean</span> canReuseInBitmap) {

        Bitmap bitmap;
        <span class="hljs-keyword">if</span> (canReuseInBitmap) {
            bitmap = sentBitmap;
        } <span class="hljs-keyword">else</span> {
            bitmap = sentBitmap.copy(sentBitmap.getConfig(), <span class="hljs-keyword">true</span>);
        }

        <span class="hljs-keyword">if</span> (radius < <span class="hljs-number">1</span>) {
            <span class="hljs-keyword">return</span> (<span class="hljs-keyword">null</span>);
        }

        <span class="hljs-keyword">int</span> w = bitmap.getWidth();
        <span class="hljs-keyword">int</span> h = bitmap.getHeight();

        <span class="hljs-keyword">int</span>[] pix = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[w * h];
        bitmap.getPixels(pix, <span class="hljs-number">0</span>, w, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, w, h);

        <span class="hljs-keyword">int</span> wm = w - <span class="hljs-number">1</span>;
        <span class="hljs-keyword">int</span> hm = h - <span class="hljs-number">1</span>;
        <span class="hljs-keyword">int</span> wh = w * h;
        <span class="hljs-keyword">int</span> div = radius + radius + <span class="hljs-number">1</span>;

        <span class="hljs-keyword">int</span> r[] = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[wh];
        <span class="hljs-keyword">int</span> g[] = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[wh];
        <span class="hljs-keyword">int</span> b[] = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[wh];
        <span class="hljs-keyword">int</span> rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
        <span class="hljs-keyword">int</span> vmin[] = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[Math.max(w, h)];

        <span class="hljs-keyword">int</span> divsum = (div + <span class="hljs-number">1</span>) >> <span class="hljs-number">1</span>;
        divsum *= divsum;
        <span class="hljs-keyword">int</span> dv[] = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[<span class="hljs-number">256</span> * divsum];
        <span class="hljs-keyword">for</span> (i = <span class="hljs-number">0</span>; i < <span class="hljs-number">256</span> * divsum; i++) {
            dv[i] = (i / divsum);
        }

        yw = yi = <span class="hljs-number">0</span>;

        <span class="hljs-keyword">int</span>[][] stack = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[div][<span class="hljs-number">3</span>];
        <span class="hljs-keyword">int</span> stackpointer;
        <span class="hljs-keyword">int</span> stackstart;
        <span class="hljs-keyword">int</span>[] sir;
        <span class="hljs-keyword">int</span> rbs;
        <span class="hljs-keyword">int</span> r1 = radius + <span class="hljs-number">1</span>;
        <span class="hljs-keyword">int</span> routsum, goutsum, boutsum;
        <span class="hljs-keyword">int</span> rinsum, ginsum, binsum;

        <span class="hljs-keyword">for</span> (y = <span class="hljs-number">0</span>; y < h; y++) {
            rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = <span class="hljs-number">0</span>;
            <span class="hljs-keyword">for</span> (i = -radius; i <= radius; i++) {
                p = pix[yi + Math.min(wm, Math.max(i, <span class="hljs-number">0</span>))];
                sir = stack[i + radius];
                sir[<span class="hljs-number">0</span>] = (p & <span class="hljs-number">0xff0000</span>) >> <span class="hljs-number">16</span>;
                sir[<span class="hljs-number">1</span>] = (p & <span class="hljs-number">0x00ff00</span>) >> <span class="hljs-number">8</span>;
                sir[<span class="hljs-number">2</span>] = (p & <span class="hljs-number">0x0000ff</span>);
                rbs = r1 - Math.abs(i);
                rsum += sir[<span class="hljs-number">0</span>] * rbs;
                gsum += sir[<span class="hljs-number">1</span>] * rbs;
                bsum += sir[<span class="hljs-number">2</span>] * rbs;
                <span class="hljs-keyword">if</span> (i > <span class="hljs-number">0</span>) {
                    rinsum += sir[<span class="hljs-number">0</span>];
                    ginsum += sir[<span class="hljs-number">1</span>];
                    binsum += sir[<span class="hljs-number">2</span>];
                } <span class="hljs-keyword">else</span> {
                    routsum += sir[<span class="hljs-number">0</span>];
                    goutsum += sir[<span class="hljs-number">1</span>];
                    boutsum += sir[<span class="hljs-number">2</span>];
                }
            }
            stackpointer = radius;

            <span class="hljs-keyword">for</span> (x = <span class="hljs-number">0</span>; x < w; x++) {

                r[yi] = dv[rsum];
                g[yi] = dv[gsum];
                b[yi] = dv[bsum];

                rsum -= routsum;
                gsum -= goutsum;
                bsum -= boutsum;

                stackstart = stackpointer - radius + div;
                sir = stack[stackstart % div];

                routsum -= sir[<span class="hljs-number">0</span>];
                goutsum -= sir[<span class="hljs-number">1</span>];
                boutsum -= sir[<span class="hljs-number">2</span>];

                <span class="hljs-keyword">if</span> (y == <span class="hljs-number">0</span>) {
                    vmin[x] = Math.min(x + radius + <span class="hljs-number">1</span>, wm);
                }
                p = pix[yw + vmin[x]];

                sir[<span class="hljs-number">0</span>] = (p & <span class="hljs-number">0xff0000</span>) >> <span class="hljs-number">16</span>;
                sir[<span class="hljs-number">1</span>] = (p & <span class="hljs-number">0x00ff00</span>) >> <span class="hljs-number">8</span>;
                sir[<span class="hljs-number">2</span>] = (p & <span class="hljs-number">0x0000ff</span>);

                rinsum += sir[<span class="hljs-number">0</span>];
                ginsum += sir[<span class="hljs-number">1</span>];
                binsum += sir[<span class="hljs-number">2</span>];

                rsum += rinsum;
                gsum += ginsum;
                bsum += binsum;

                stackpointer = (stackpointer + <span class="hljs-number">1</span>) % div;
                sir = stack[(stackpointer) % div];

                routsum += sir[<span class="hljs-number">0</span>];
                goutsum += sir[<span class="hljs-number">1</span>];
                boutsum += sir[<span class="hljs-number">2</span>];

                rinsum -= sir[<span class="hljs-number">0</span>];
                ginsum -= sir[<span class="hljs-number">1</span>];
                binsum -= sir[<span class="hljs-number">2</span>];

                yi++;
            }
            yw += w;
        }
        <span class="hljs-keyword">for</span> (x = <span class="hljs-number">0</span>; x < w; x++) {
            rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = <span class="hljs-number">0</span>;
            yp = -radius * w;
            <span class="hljs-keyword">for</span> (i = -radius; i <= radius; i++) {
                yi = Math.max(<span class="hljs-number">0</span>, yp) + x;

                sir = stack[i + radius];

                sir[<span class="hljs-number">0</span>] = r[yi];
                sir[<span class="hljs-number">1</span>] = g[yi];
                sir[<span class="hljs-number">2</span>] = b[yi];

                rbs = r1 - Math.abs(i);

                rsum += r[yi] * rbs;
                gsum += g[yi] * rbs;
                bsum += b[yi] * rbs;

                <span class="hljs-keyword">if</span> (i > <span class="hljs-number">0</span>) {
                    rinsum += sir[<span class="hljs-number">0</span>];
                    ginsum += sir[<span class="hljs-number">1</span>];
                    binsum += sir[<span class="hljs-number">2</span>];
                } <span class="hljs-keyword">else</span> {
                    routsum += sir[<span class="hljs-number">0</span>];
                    goutsum += sir[<span class="hljs-number">1</span>];
                    boutsum += sir[<span class="hljs-number">2</span>];
                }

                <span class="hljs-keyword">if</span> (i < hm) {
                    yp += w;
                }
            }
            yi = x;
            stackpointer = radius;
            <span class="hljs-keyword">for</span> (y = <span class="hljs-number">0</span>; y < h; y++) {
                <span class="hljs-comment">// Preserve alpha channel: ( 0xff000000 & pix[yi] )</span>
                pix[yi] = (<span class="hljs-number">0xff000000</span> & pix[yi]) | (dv[rsum] << <span class="hljs-number">16</span>) | (dv[gsum] << <span class="hljs-number">8</span>) | dv[bsum];

                rsum -= routsum;
                gsum -= goutsum;
                bsum -= boutsum;

                stackstart = stackpointer - radius + div;
                sir = stack[stackstart % div];

                routsum -= sir[<span class="hljs-number">0</span>];
                goutsum -= sir[<span class="hljs-number">1</span>];
                boutsum -= sir[<span class="hljs-number">2</span>];

                <span class="hljs-keyword">if</span> (x == <span class="hljs-number">0</span>) {
                    vmin[y] = Math.min(y + r1, hm) * w;
                }
                p = x + vmin[y];

                sir[<span class="hljs-number">0</span>] = r[p];
                sir[<span class="hljs-number">1</span>] = g[p];
                sir[<span class="hljs-number">2</span>] = b[p];

                rinsum += sir[<span class="hljs-number">0</span>];
                ginsum += sir[<span class="hljs-number">1</span>];
                binsum += sir[<span class="hljs-number">2</span>];

                rsum += rinsum;
                gsum += ginsum;
                bsum += binsum;

                stackpointer = (stackpointer + <span class="hljs-number">1</span>) % div;
                sir = stack[stackpointer];

                routsum += sir[<span class="hljs-number">0</span>];
                goutsum += sir[<span class="hljs-number">1</span>];
                boutsum += sir[<span class="hljs-number">2</span>];

                rinsum -= sir[<span class="hljs-number">0</span>];
                ginsum -= sir[<span class="hljs-number">1</span>];
                binsum -= sir[<span class="hljs-number">2</span>];

                yi += w;
            }
        }

        bitmap.setPixels(pix, <span class="hljs-number">0</span>, w, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, w, h);

        <span class="hljs-keyword">return</span> (bitmap);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li><li>111</li><li>112</li><li>113</li><li>114</li><li>115</li><li>116</li><li>117</li><li>118</li><li>119</li><li>120</li><li>121</li><li>122</li><li>123</li><li>124</li><li>125</li><li>126</li><li>127</li><li>128</li><li>129</li><li>130</li><li>131</li><li>132</li><li>133</li><li>134</li><li>135</li><li>136</li><li>137</li><li>138</li><li>139</li><li>140</li><li>141</li><li>142</li><li>143</li><li>144</li><li>145</li><li>146</li><li>147</li><li>148</li><li>149</li><li>150</li><li>151</li><li>152</li><li>153</li><li>154</li><li>155</li><li>156</li><li>157</li><li>158</li><li>159</li><li>160</li><li>161</li><li>162</li><li>163</li><li>164</li><li>165</li><li>166</li><li>167</li><li>168</li><li>169</li><li>170</li><li>171</li><li>172</li><li>173</li><li>174</li><li>175</li><li>176</li><li>177</li><li>178</li><li>179</li><li>180</li><li>181</li><li>182</li><li>183</li><li>184</li><li>185</li><li>186</li><li>187</li><li>188</li><li>189</li><li>190</li><li>191</li><li>192</li><li>193</li><li>194</li><li>195</li><li>196</li><li>197</li><li>198</li><li>199</li><li>200</li><li>201</li><li>202</li><li>203</li><li>204</li><li>205</li><li>206</li><li>207</li><li>208</li><li>209</li></ul>
RenderScript处理高斯模糊

android4.3之后可使用,需要在build.gradle中配置:

<code class="language-gradle hljs cs has-numbering">defaultConfig {

        <span class="hljs-comment">//BlurTransformation</span>
        renderscriptTargetApi <span class="hljs-number">23</span>
        renderscriptSupportModeEnabled <span class="hljs-keyword">true</span>
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">RSBlur</span> {</span>

    <span class="hljs-annotation">@TargetApi</span>(Build.VERSION_CODES.JELLY_BEAN_MR2)
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Bitmap <span class="hljs-title">blur</span>(Context context, Bitmap blurredBitmap, <span class="hljs-keyword">int</span> radius) <span class="hljs-keyword">throws</span> RSRuntimeException {
        <span class="hljs-keyword">try</span> {
            RenderScript rs = RenderScript.create(context);
            Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_NONE,
                    Allocation.USAGE_SCRIPT);
            Allocation output = Allocation.createTyped(rs, input.getType());
            ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

            blur.setInput(input);
            blur.setRadius(radius);
            blur.forEach(output);
            output.copyTo(blurredBitmap);
            rs.destroy();
        } <span class="hljs-keyword">catch</span> (RSRuntimeException e) {
            blurredBitmap = FastBlur.blur(blurredBitmap, radius, <span class="hljs-keyword">true</span>);
        }
        <span class="hljs-keyword">return</span> blurredBitmap;
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li></ul>

16.动画处理

通过animate()方法可以设置xml文件定义的4种补间动画(alpha、scale、translate、rotate)
例如:

res\anim\left_in.xml

<code class="language-xml hljs  has-numbering">
<span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">set</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">translate
</span>        <span class="hljs-attribute">android:duration</span>=<span class="hljs-value">"@android:integer/config_mediumAnimTime"</span>
        <span class="hljs-attribute">android:fromXDelta</span>=<span class="hljs-value">"-50%p"</span>
        <span class="hljs-attribute">android:toXDelta</span>=<span class="hljs-value">"0"</span>/></span>
    <span class="hljs-tag"><<span class="hljs-title">alpha
</span>        <span class="hljs-attribute">android:duration</span>=<span class="hljs-value">"@android:integer/config_mediumAnimTime"</span>
        <span class="hljs-attribute">android:fromAlpha</span>=<span class="hljs-value">"0.0"</span>
        <span class="hljs-attribute">android:toAlpha</span>=<span class="hljs-value">"1.0"</span>/></span>
<span class="hljs-tag"></<span class="hljs-title">set</span>></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul>

使用方式:

<code class="language-java hljs  has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestGlideActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);
        Glide.with(<span class="hljs-keyword">this</span>).
                load(R.drawable.test).
                asBitmap().
                animate(R.anim.left_in).<span class="hljs-comment">//加载xml文件定义的动画</span>
                into(targetView);
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>

处理此外,还可以通过animate指定属性动画:

<code class="language-xml hljs  has-numbering">public class TestGlideActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ImageView targetView = (ImageView) findViewById(R.id.iv_target);

        ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
            @Override
            public void animate(View view) {
                //设置属性动画
                ObjectAnimator moveIn = ObjectAnimator.ofFloat(view, "translationX", -500f, 0f);
                ObjectAnimator rotate = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f);
                ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f, 1f);
                ObjectAnimator moveTop = ObjectAnimator.ofFloat(view, "translationY", 0f, -2000, 0f);
                AnimatorSet animSet = new AnimatorSet();
                //先左进,然后旋转伴随淡入效果,最后移动向上
                animSet.play(rotate).with(fadeInOut).after(moveIn).before(moveTop);
                animSet.setDuration(5000);
                animSet.start();
            }
        };
        Glide.with(this).
                load(R.drawable.test).
                asBitmap().
                animate(animationObject).//加载属性动画
                into(targetView);
    }
}
转自:http://blog.csdn.net/mchenys/article/details/51599039
</code>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值