渐变在使用自定义的XML,<gradient> </gradient>
也可以实现,下边要记录的是使用android提供的API完成的
一 、阴影
阴影在开发中一般使用与文字和图形,在绘图中又一个叫layer的层的概念,默认情况下,一般绘制都在叫main layer层上,当然,也可以绘制在新建的layer层上,实际上阴影就是在main layer层下面添加一个阴影层(shader layer) 层,可以为阴影添加模糊程度、偏移量、阴影的颜色等,
在paint中,setShadowLayer()方法
方法名 | 作用 |
setShadowLayer(float radius, float dx, float dy,int shadowColor) | radius 阴影的半径,dx x 方向的编译,shadowColor 阴影的颜色 |
阴影layer显示阴影是shader layer 两种类型
方法名 | 作用 |
View.LAYER_TYPE_SOFTWARE | 阴影只能在这个环境下工作 |
View.LAYER_TYPE_HARDWARE | 默认 |
调用View类中的setLayerType(int layerType,Paint paint) 为paint对象指定层的类型,
/**
* Created by mr.kong on 2017/8/21.
*/class ShaderView : View {
private var mPaint: Paint? = null
constructor(context: Context) : this(context,null) {}
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs,0) {}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init()
}
private fun init() {
mPaint = Paint(Paint.ANTI_ALIAS_FLAG) //抗锯齿
mPaint?.textSize = 100F
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
this.setLayerType(View.LAYER_TYPE_SOFTWARE,mPaint)
/**
* 定义的是一个半径为10,x轴和y轴偏移都为1 的红色阴影
*/
mPaint?.setShadowLayer(10F,1F,1F,Color.RED)
canvas?.drawText("我是红色发光效果",100F,100F,mPaint)
mPaint?.setShadowLayer(10F,5F,5F,Color.BLUE)
canvas?.drawText("绘图技术",100F,220F,mPaint)
}
private var mPaint: Paint? = null
constructor(context: Context) : this(context,null) {}
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs,0) {}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init()
}
private fun init() {
mPaint = Paint(Paint.ANTI_ALIAS_FLAG) //抗锯齿
mPaint?.textSize = 100F
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
this.setLayerType(View.LAYER_TYPE_SOFTWARE,mPaint)
/**
* 定义的是一个半径为10,x轴和y轴偏移都为1 的红色阴影
*/
mPaint?.setShadowLayer(10F,1F,1F,Color.RED)
canvas?.drawText("我是红色发光效果",100F,100F,mPaint)
mPaint?.setShadowLayer(10F,5F,5F,Color.BLUE)
canvas?.drawText("绘图技术",100F,220F,mPaint)
}
}
运行 效果
二、渐变
渐变,用比较官方的解释就是,绘图的过程中颜色货位图一特定的规律进行变化,能增强物体的质感和审美的情趣,还可以,能理解哈,
种类 | 说明 |
LinerGradient | 线性渐变 |
RadialGradient | 径向渐变 |
SweepGradient | 扫描渐变 |
BitmapGradient | 位图渐变 |
ComposeShader | 混合渐变 |
⚠️ 其中线性渐变、径向渐变和扫描渐变属于颜色的渐变,指定2��️或以上的颜色,根据颜色过渡算法自动计算出中间的过度颜色
渐变的分类
种类 | 说明 |
ABAB | A、B两种颜色重复变化,通过TileMode类的PEPEAT常量表示 |
ABBA | A、B两种颜色镜像变化,通过TileMode类的MIRROR常量表示 |
AABB | A、B两种颜色只出现一次,通过TileMode类的CLAMP常量表示 |
从左到右分别为 CLAMP、MIRROR、PEPEAT
定义渐变的时候必须指定一个渐变区域,更具定义的渐变内容和渐变模式填满该区域,调用setShader()指定一种简便类型
2.1 线性渐变 LinearGradient
线性渐变更具指定的角度、颜色和模式使用渐变颜色填充绘图区域,定义两个点,渐变的方向线的方向垂直
LinearGradient 构造方法
public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[],TileMode tile)
public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, TileMode tile)
其他几种就不一一记录了,