自定义View (五) 阴影、渐变

渐变在使用自定义的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)
}   

}
运行 效果
这里写图片描述

二、渐变

渐变,用比较官方的解释就是,绘图的过程中颜色货位图一特定的规律进行变化,能增强物体的质感和审美的情趣,还可以,能理解哈,

种类说明
LinerGradient线性渐变
RadialGradient径向渐变
SweepGradient扫描渐变
BitmapGradient位图渐变
ComposeShader混合渐变

⚠️ 其中线性渐变、径向渐变和扫描渐变属于颜色的渐变,指定2��️或以上的颜色,根据颜色过渡算法自动计算出中间的过度颜色

渐变的分类

种类说明
ABABA、B两种颜色重复变化,通过TileMode类的PEPEAT常量表示
ABBAA、B两种颜色镜像变化,通过TileMode类的MIRROR常量表示
AABBA、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)

其他几种就不一一记录了,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值