漸變在使用自定義的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��️或以上的顏色,根據顏色過渡算法自動計算出中間的過度顏色
漸變的分類
種類 | 說明 |
---|---|
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)
其他幾種就不一一記錄了,