位置: 编程技术 - 正文

Android着色器Shader介绍(着色器问题)

编辑:rootadmin
Shader

推荐整理分享Android着色器Shader介绍(着色器问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:着色器选项,shader 着色器,着色器有什么用,着色器设置,着色器选项,着色器影响帧数吗,着色器模型3.0,着色器影响帧数吗,内容如对您有帮助,希望把文章链接给更多的朋友!

Android中绘图时渐变着色需要使用android.graphics.Shader类,该类有几个子类

LinearGradient 线性梯度渐变RadialGradient 环形梯度渐变或者灯光渲染SweepGradient 扫描梯度渐变BitmapShader 图片渲染ComposeShader 组合渲染

下面将依次介绍各个渲染器的用法和效果图。

LinearGradient

LinearGradient有两个构造器,我们先看简单的

该构造器指定一个起点坐标一个终点坐标以及二者的色值,我们先不关心最后的TileMode参数。 先来看一下该渲染器的效果,我将渲染器的范围设定到屏幕的中间处,起点(左上角)颜色为红色,终点(右下角)为绿色,根据渲染算法,中间颜色值应该为0xFF 代码如下1:

这段代码的运行效果是这样的

LinearGradient还有一个构造器是这样的:

该构造器包含一系列颜色以及对应的位置值,如果不提供位置,那么渲染器会均匀分布所提供的几种颜色。 我们可以这么用,这里使用的绘图范围和上面一致,不在赘述:

效果是这样的

如果再加一组位置初始化LinearGradient,如下(为了显示效果更明显,我把修改了渲染器的方向为垂直的):

下面是效果图,从效果图上可以看到红,黄,绿三种颜色比较靠上,在我们提供的位置处。

RadialGradient

环形梯度着色,又叫光束渲染。 同样的,RadialGradient有两个构造器,我们先看简单的:

该方法要求一个圆心坐标、半径,圆心色值以及圆环色值。 下面演示一下这个着色器的用法和效果,我使用白色和透明色作为起始色值和边界色值,这是一个灯光的效果,为了更明显写,我把窗帘拉上了。

我们这里定义的圆心在屏幕中间,直径为屏幕宽度,效果是这样的,很像一个点光源照射的效果:

另一个构造器和LinearGradient类似,需要一组色值和对应的一组位置,就不赘述了,直接贴代码:

圆心位置和半径使用上例中的定义。这段代码展示的效果是这样的,四种颜色在指定位置过渡: 作为对比,我们看一下不带位置参数的效果图: 代码片段:

SweepGradient

扫描着色,其效果好像雷达扫描。 同上面两个着色器类似,该类也有两个构造器,不同的是,该类的构造器不需要TileMode参数。 第一个构造器:

这个构造器看起来比较简单,仅需要一个圆心坐标和一组色值,我们来看一下它的使用方法和效果

Android着色器Shader介绍(着色器问题)

同样的,我这里使用屏幕中心作为圆心,效果图是这样子的

上图的扫描渲染在起始线(终止线)上的效果不尽如人意,要想颜色在该线上平缓的过渡,至少需要定义有三个值的数组。幸运的是SweepGradient提供了这样一个构造器:

这里我们走远一些,看看六种色值绘出的效果(因为第一个色值和最后的色值要相同,所以数组的长度是7)

效果图是这样的:

构造带位置参数的扫描着色器,效果和上面的两个着色器类似,我们只看一下效果图吧,我使用如下参数初始化着色器:

BitmapShader

图片渲染器 图片渲染器只有一个构造器:

我们提供一个位图和纵向横向的TileMode就行了。讲到这里,也该提一下所谓TileMode是什么了。 TileMode意义过来就是平铺模式,指的是在着色器范围之外的部分使用什么颜色进行着色,TileMode定义了三种模式:

CLAMP 使用边界颜色着色REPEAT 重复着色器效果MIRROR 镜像重复使用着色器效果

语言表达不如图片更清楚,下面我们看一下TileMode是如何起作用的。如下使用图片渲染器:

这段代码绘制出的效果是这样的: 从该图中我们可以清楚看到TileMode的作用方式。

CLAMP的着色方式就比较有意思使用了,我们仍然使用上面的代码,但是下面的参数初始化构造器:

效果是这样的:

注意图片渲染器的顶部向上的扩展是不正常的,这大概是图片渲染器的bug吧。

TileMode

上面使用图片渲染的时候解释了几种TileMode的效果,同样的,在LinearGradient中,这几种模式的效果我们可以想象,不过值得一提的是在RadialGradient中的效果是这样的,贴图供参考: MIRROR模式效果:

REPEAT模式效果:

ComposeShader

最后提一下,Shader类还有一个子类叫ComposeShader,故名思议,该着色器是由两个着色器组合而来的。 由于组合着色器涉及到了颜色叠加算法,这里不做讨论。 ComposeShader的使用需要开启软件渲染:

如果不开启软件渲染,组合着色器将没有效果,不过有时候我们可以使用叠加绘制的方式来模拟组合着色器,比如下图就是先绘制了一个扫描着色器,再绘制了一次带透明度的环形着色器

参考:AndroidCircleColorPicker

CyanFlxy原创,转载请注明出处

实际绘图的时候不要在onDraw中进行对象的创建,因为该方法会频繁的调用,应该在其他位置中将用到的对象初始化好 ↩

版权声明:本文为博主原创文章,未经博主允许不得转载。

android 一个很漂亮的控件ObservableScrollView(含片段代码和源码) 转自:

打开app后Edittext自动获取焦点并弹出输入法的方法 方法1.:调用代码://自动弹出键盘InputMethodManagerinputManager=(InputMethodManager)getApplication().getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.toggleSoftInput(0,InputMet

Android照片墙完整版,完美结合LruCache和DiskLruCache 转载请注明出处:

标签: 着色器问题

本文链接地址:https://www.jiuchutong.com/biancheng/370976.html 转载请保留说明!

上一篇:android 为viewPager增加动画切换效果(android viewpager)

下一篇:打开app后Edittext自动获取焦点并弹出输入法的方法(edit apps)

  • 核定征收的个体户可以开专票吗
  • 个体工商户税收优惠政策2023年
  • 保险公司报销修手机
  • 高铁票丢失了可以二次打印吗
  • 计算企业所得税可以扣除的项目有
  • 个税申报没填过租房信息,却有怎么回事
  • 微信支付宝收入计入科目
  • 公司滴滴发票是什么意思
  • 工商年报最迟什么时候申报
  • 个税申报本期收入包括社保吗
  • 建设用地规划许可证和建设工程规划许可证的区别
  • 营改增一般纳税人标准
  • 增值税的税负率就是用应缴纳的增值税总额
  • 企业自查补税报告怎么写?
  • 企业什么税可以退
  • 营改增后受托代销手续费税率是多少?
  • 上年多计提附加税调整了,今年怎么调整
  • 固定资产抵扣进项
  • 现金日记账本月合计图
  • 报销话费属于什么费用
  • 个人社保费需要交多少年
  • 海外佣金税务怎么缴纳
  • 行政事业单位的营业执照叫什么
  • linux怎么操作
  • php技巧
  • php生成1到100的数组
  • php注释的主要作用是什么?
  • 酒类销售企业广告宣传语
  • 企业合并发生的审计费用,评估费用会计分录
  • 手把手教你用气焊视频
  • react框架和vue哪个用的人多
  • tftp传输命令
  • 场地退租协议样本
  • 利润表主营业务成本怎么算
  • 注册公司填写从业人数多少合适
  • 红字发票已开但红字发票信息表已核销待查证,怎么回事?
  • 收到老板的钱怎么做分录
  • 详解sql基础语法实验报告
  • 酒店周转材料怎么摊销
  • 政府会计准则的双报告
  • 一般纳税人领票提交什么资料
  • 接受捐赠计入
  • 公司无流水要交税不
  • 以前年度损益调整是什么意思
  • 公司借款给个人400万合法吗
  • 小规模纳税人差旅费可以抵扣吗
  • 增资扩股影响原股东的利益吗
  • 产品质量问题有赔偿吗
  • 应交税费应交增值税已交税金怎么用
  • 短期理财收益账务分录
  • 食堂计入公务接待费
  • 会计记账基础有哪两种
  • 进口车购置税多少个点
  • 中小企业会计建议和意见
  • 工资核算模块初始设置的内容有
  • mysql tmp_table_size和max_heap_table_size大小配置
  • win8.1怎么样
  • xp系统开机后什么都没有,怎么办
  • centos7如何设置ssh免密登陆
  • wcu.exe是什么
  • 解决磁盘被写保护的方法
  • windows7开始菜单不见了
  • Win10 Build 10586.494稳定版更新修复内容以及KB3172985补丁下载地址
  • 如果在一个命令行上输入和执行多条命令
  • pqhelper.exe是什么进程 pqhelper进程查询
  • js提交表单,如果为空出现红色文字
  • node.js gui
  • 局域网扫描器
  • 使用jquery的步骤
  • [置顶]游戏名:chivalry2
  • 命令行net
  • python ping ip地址
  • vue拦截器使用场景
  • bootstrap-
  • js中改变css文件中的样式
  • 轮廓模式
  • 如何在网上查看自己的征信
  • 七创社开放时间
  • 税务注销相关文件
  • 处室岗位是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设