Android-高级-UI-进阶之路(四)-Paint-渲染-滤镜-xfermode-使用

// 设置绘制路径的效果,如点画线等
PathEffect setPathEffect(PathEffect effect);
// 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等
MaskFilter setMaskFilter(MaskFilter maskfilter);
// 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
Typeface setTypeface(Typeface typeface);
// 设置光栅化
Rasterizer setRasterizer(Rasterizer rasterizer);
// 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
// 注意:在Android4.0以上默认开启硬件加速,有些图形的阴影无法显示。关闭View的硬件加速 view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
void setShadowLayer(float radius, float dx, float dy, int color);
// 设置文本对齐
void setTextAlign(Align align);
// 设置字体大小
void setTextSize(float textSize);
// 设置文本缩放倍数,1.0f为原始
void setTextScaleX(float scaleX);
// 设置斜体文字,skewX为倾斜弧度
void setTextSkewX(float skewX);

复制代码

Paint 高级使用

渲染

1. 绘制图像阴影效果 setShadowLayer

val paint = Paint()
paint.setStyle(Paint.Style.FILL)
paint.setColor(Color.BLACK)
// 设置透明度,要在setColor后面设置才生效
paint.setAlpha(80)
// 如果不关闭硬件加速,setShadowLayer无效
setLayerType(View.LAYER_TYPE_SOFTWARE, null)
// (阴影的半径,X轴方向上相对主体的位移,Y轴相对位移)
paint.setShadowLayer(50f, 10f, 10f, Color.RED)
paint.setTextSize(50f)

// cx和cy为圆点的坐标
val radius = 200
val offest = 40

val startX = width / 2 - radius
val startY = height / 2
canvas.drawText(“画一个圆”, width / 2 - 100f, height / 2f - 300, paint)
canvas.drawCircle(startX.toFloat(), startY.toFloat(), radius.toFloat(), paint)

paint.setStyle(Paint.Style.STROKE)
paint.setStrokeWidth(5f)
paint.setShadowLayer(50f, -20f, 10f, Color.RED)
canvas.drawCircle(startX + radius * 2 + offest.toFloat(), startY.toFloat(), radius.toFloat(), paint)
复制代码

2. 为 Bitmap 设置图形渲染 BitmapShader

class MyGradientView : View {
private var mPaint: Paint? = null
private var mBitMap: Bitmap? = null
private var mWidth: Int = 0
private var mHeight: Int = 0
private val mColors = intArrayOf(Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW)
constructor(context: Context?) : super(context) {
init()
}

constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

private fun init() {
mBitMap = (resources.getDrawable(R.mipmap.girl_gaitubao) as BitmapDrawable).bitmap
mPaint = Paint()
mWidth = mBitMap!!.getWidth()
mHeight = mBitMap!!.getHeight()
}

override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
/**

  • TileMode.CLAMP 拉伸最后一个像素去铺满剩下的地方
  • TileMode.MIRROR 通过镜像翻转铺满剩下的地方。
  • TileMode.REPEAT 重复图片平铺整个画面(电脑设置壁纸)
  • 在图片和显示区域大小不符的情况进行扩充渲染
    /
    /
    *
  • 位图渲染,BitmapShader(@NonNull Bitmap bitmap, @NonNull TileMode tileX, @NonNull TileMode tileY)
  • Bitmap:构造shader使用的bitmap
  • tileX:X轴方向的TileMode
  • tileY:Y轴方向的TileMode
    */
    val bitMapShader = BitmapShader(
    mBitMap!!, Shader.TileMode.MIRROR,
    Shader.TileMode.MIRROR
    )
    //设置图片效果
    mPaint!!.setShader(bitMapShader)
    //抗锯齿
    mPaint!!.setAntiAlias(true)
    //绘制圆
    canvas.drawCircle(width/2f,height/2f,mHeight.toFloat(),mPaint!!)
    }
    }

参数的意思我注释很详细,我就不在过多说明了。

3. 线性渲染 LinearGradient

/**线性渲染

  • x0, y0, 起始点
  • x1, y1, 结束点
  • int[] mColors, 中间依次要出现的几个颜色
  • float[] positions 位置数组,position的取值范围[0,1],作用是指定几个颜色分别放置在那个位置上,
  • 如果传null,渐变就线性变化。
  • tile 用于指定控件区域大于指定的渐变区域时,空白区域的颜色填充方法
    */
    var linearGradient = LinearGradient(
    0f, 0f, 800f, 800f,
    mColors, null, Shader.TileMode.CLAMP
    )
    // var linearGradient = LinearGradient(0f, 0f, 400f, 400f, mColors, null, Shader.TileMode.REPEAT)
    mPaint!!.setShader(linearGradient)
    canvas.drawRect(0f, 0f, 800f, 800f, mPaint!!)

4. 环形渲染 RadialGradient

/**
*

  • 环形渲染
  • centerX ,centerY:shader的中心坐标,开始渐变的坐标
  • radius:渐变的半径
  • centerColor,edgeColor:中心点渐变颜色,边界的渐变颜色
  • colors:渐变颜色数组
  • stops:渐变位置数组,类似扫描渐变的positions数组,取值[0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值