文档章节

Android进阶学习-着色器/渲染器

August1996_
 August1996_
发布于 2016/05/22 14:48
字数 370
阅读 14
收藏 0

    Android绘图支持里面有有一个叫做Shader的东西,翻译过来就是叫做着色器,渲染器.作用是用来实现一种渐变,渲染的效果,其实就是填充.

    一共有5种Shader:

    BitmapShader    //位图

    LinearGradient    //线性

    RadialGradient    //光束

    SweepGradient    //梯度

    ComposeGradient    //混合

 

除了BitmapShader之外,其他的真的是产生渐变效果,而BitmapShader则是生成一个图像,类似于Photoshop的图像填充,它的作用是通过Paint对Canvas进行制定的Bitmap填充,填充模式有下面几种:

    CLAMP    //拉伸填充

    REPEAT    //横纵向重复填充

     MIRROR    //横向,纵向不断翻转

 

既然我们可以选择Bitmap去作为图像填充,那么我们可不可以实现这种圆形头像的效果呢?

肯定是可以的,我们可以用Bitmap去填充一个圆,在这篇文章的基础上做修改

修改process函数:

	public void process(View v) {
		Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jpg);
		BitmapShader mBitmapShader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);
		Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
		mPaint.setShader(mBitmapShader);
		
		Bitmap destBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
		Canvas canvas = new Canvas(destBitmap);
		
		/**
		 * 以上设置BitmapShader到Paint里
		 * 下面就是使用这个填充去画一个圆
		 */
		canvas.drawCircle(mBitmap.getWidth() / 2, mBitmap.getHeight() / 2,
				(Math.min(mBitmap.getWidth(), mBitmap.getHeight())) / 2, mPaint);
		((ImageView)
		
		findViewById(R.id.img)).setImageBitmap(destBitmap);
	}

这是一个应用BitmapShader的小例子,下面的其他几个着色器就等大家动手去做啦.也可以看看这个博客

参考:Canvas使用7行代码自定义圆形头像

© 著作权归作者所有

共有 人打赏支持
August1996_
粉丝 2
博文 51
码字总数 29055
作品 0
湛江
程序员
私信 提问
Android 音视频开发入门指南(2)

GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处。独到之处在哪?当使用Surfaceview无能为力、痛不欲生时就只有使用GLSurfaceView了,它能够真正做...

shareus
04/23
0
0
【Opengl Android】在安卓上渲染一个obj模型

工具:eclipse 一、获得一个obj文件并分析内容 3D溜溜网 点击打开链接 可以下载到很多模型文件 用3dmax打开 导出外部格式文件obj 即可得到一个obj模型 将格式改为txt 即可看到里面的数据内容...

qq_35263780
04/22
0
0
【备忘】2018年最新FFmpeg音视频教程视频

百度网盘 第一章 音视频行业的前景及应用场景第二章 FFmpeg处理流程及常用命令第三章 FFmpeg之C语言及VIM第四章 FFmpeg之C语言基础第五章 FFmpeg多媒体文件处理第六章 FFmpeg编解码案例第七章...

javail
11/08
0
0
【GoogleSamples】源码研究 - hello-gl2

简单介绍 hello-gl2项目是用来展示如何用jni的方式来使用OpenGL ES 2.0。所谓JNI的方式,是以Java代码为主,在Java代码中调用C++代码去实现功能。与之相对的,可以以C++代码为主,在C++代码中...

闪电的蓝熊猫
05/19
0
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

“敏捷开发”怎么就“敏捷”了

什么是敏捷开发 传统的软件开发过程中,我们往往会针对特定的用户需求,采用“瀑布模型”,从用户的需求开始一步步进行需求分析、软件设计、软件开发、软件测试以及软件交付与维护。 然而,这...

SamYjy
46分钟前
3
0
聊聊我怎么系统学习Linux技能并快速提高的

随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能。而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱好者们的喜爱。今天我们就来和大家一起聊一...

linuxprobe16
58分钟前
3
0
MySQL专题—— 从认识索引到理解索引【索引优化】

认识索引 认识索引是什么东西非常关键,一个非常恰当的比喻就是书的目录页与书的正文内容之间的关系,为了方便查找书中的内容,通过对内容建立索引形成目录。因此,首先你要明白的一点就是,...

架构师springboot
今天
2
0
Java-怎样构造方法和匿名对象

前言 在编写程序时不安全的初始化会导致程序发生发生重大错误。为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法。J...

小刀爱编程
今天
2
0
7、MyBaties 增删改

事务 : 从数据库角度出发,完成业务时需要执行的 SQL 集合,统称一个事务. 1、在 mybatis 中默认是关闭了 JDBC 的自动提交功能 每一个 SqlSession 默认都是不自动提交事务. session.commit()提...

KingFightingAn
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部