Universal-Image-Loader源码阅读(33)-RoundedVignetteBitmapDisplayer

原创 2016年08月30日 14:25:35

圆角并且有影晕效果。

其实还是在修改渲染效果,如果你对渲染深有研究的话,完全可以自己写出几个好玩的渲染出来,然后应用到这里。

源码:

/**
 * Can display bitmap with rounded corners and vignette effect. This implementation works only with ImageViews wrapped
 * in ImageViewAware.
 * <br />
 * This implementation is inspired by
 * <a href="http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/">
 * Romain Guy's article</a>. It rounds images using custom drawable drawing. Original bitmap isn't changed.
 * <br />
 * <br />
 * If this implementation doesn't meet your needs then consider
 * <a href="https://github.com/vinc3m1/RoundedImageView">this project</a> for usage.
 *
 * @author Sergey Tarasevich (nostra13[at]gmail[dot]com)
 * @since 1.9.1
 */
public class RoundedVignetteBitmapDisplayer extends RoundedBitmapDisplayer {

	public RoundedVignetteBitmapDisplayer(int cornerRadiusPixels, int marginPixels) {
		super(cornerRadiusPixels, marginPixels);
	}

	@Override
	public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
		if (!(imageAware instanceof ImageViewAware)) {
			throw new IllegalArgumentException("ImageAware should wrap ImageView. ImageViewAware is expected.");
		}

		imageAware.setImageDrawable(new RoundedVignetteDrawable(bitmap, cornerRadius, margin));
	}

	protected static class RoundedVignetteDrawable extends RoundedDrawable {//在圆角的基础上增加影晕效果

		RoundedVignetteDrawable(Bitmap bitmap, int cornerRadius, int margin) {
			super(bitmap, cornerRadius, margin);
		}

		@Override
		protected void onBoundsChange(Rect bounds) {
			super.onBoundsChange(bounds);
			RadialGradient vignette = new RadialGradient(
					mRect.centerX(), mRect.centerY() * 1.0f / 0.7f, mRect.centerX() * 1.3f,
					new int[]{0, 0, 0x7f000000}, new float[]{0.0f, 0.7f, 1.0f},
					Shader.TileMode.CLAMP);

			Matrix oval = new Matrix();
			oval.setScale(1.0f, 0.7f);
			vignette.setLocalMatrix(oval);

			paint.setShader(new ComposeShader(bitmapShader, vignette, PorterDuff.Mode.SRC_OVER));//修改渲染
		}
	}
}


高效阅读源代码指南

最近一年里,我阅读了不少开源项目的源代码,之前也和朋友讨论过阅读源代码时遇到的一些问题。我觉得有必要写一篇博文分享一下自己的经验。 序章:准备工作 通常情况下,我们不会无缘无故拿到一份源代...
  • kai8wei
  • kai8wei
  • 2016年05月13日 00:10
  • 722

Dubbo源码阅读体会(一)

Dubbo是阿里巴巴提供的开源的SOA服务化治理的技术框架,据说只是剖出来的一部分开源的,但一些基本的需求已经可以满足的,而且扩展性也非常好,通过spring bean的方式管理配置及实例,较容易上手...
  • u010681276
  • u010681276
  • 2015年06月08日 19:23
  • 1729

有关阅读JDK源码的看法

源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。  说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从...
  • mijinghjb
  • mijinghjb
  • 2014年04月25日 16:49
  • 3116

献给新手,如何阅读Linux源码(转)

常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:  ...
  • hzqnju
  • hzqnju
  • 2013年12月25日 09:38
  • 7208

使用Intellij构建spark源码阅读环境

步骤1: 下载spark-源码,这里以spark1.3为例。 http://spark.apache.org/downloads.html 2.下载编译后的spark源码,这里下载根据Hadoo...
  • lisongfeng92130
  • lisongfeng92130
  • 2016年06月20日 15:52
  • 1520

如何阅读项目源代码

如何阅读项目源代码(github)Github工程项目过大?难以阅读怎么办,本文就根据自己阅读代码的经验,总结一下如何阅读源代码的经验。借鉴博客看他人的源码分析是最简单也是最直接的项目经验获取方式,一...
  • yxy11256974
  • yxy11256974
  • 2016年12月04日 00:30
  • 2609

阅读Android源码的一些姿势____有没有必要阅读Android源码

转载地址:http://zhuanlan.zhihu.com/kaede/20564614 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:Kaede 链接:...
  • lijinhua7602
  • lijinhua7602
  • 2016年02月19日 12:16
  • 2042

阅读Android源码的一些姿势

日常开发中怎么阅读源码 找到正确的源码 IDE是日常经常用的东西,Eclipse就不说了,直接从Android Studio(基于IntelliJ Community版本改造)开始。 我们平...
  • u014387163
  • u014387163
  • 2016年08月09日 11:00
  • 1614

Linux 下源代码阅读工具 —— vim + TagList + CTags

为什么不采用 Windows 下较为著名的源代码阅读软件 SourceInsight, 其一,其在 Linux 下的安装较为繁琐; 其二,切换代码时背景色的变化会为人的眼部产生极为不舒服的感觉; 其三...
  • lanchunhui
  • lanchunhui
  • 2016年05月30日 12:35
  • 1218

源码阅读系列:源码阅读方法

一.前提条件1.纯熟扎实的语言基础如果你学java,却对反射、泛型、注解一直半解,还是不要去读什么框架了,回去把java基础打扎实反而对你自身更有益。2.UML能力在软件工程中,UML在软件的不同生命...
  • a910626
  • a910626
  • 2016年07月21日 17:54
  • 2900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Universal-Image-Loader源码阅读(33)-RoundedVignetteBitmapDisplayer
举报原因:
原因补充:

(最多只允许输入30个字)