自定义View

自定义View
• 自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw()
• 绘制的关键是 Canvas 的使用
o Canvas 的绘制类方法: drawXXX() (关键参数:Paint)
o Canvas 的辅助类方法:范围裁切和几何变换
• 可以使用不同的绘制方法来控制遮盖关系

    @Override
    protected void onDraw(Canvas canvas) {
        // 2.画背景大圆弧
        int centerX = mViewWidth / 2;
        int centerY = mViewHeight / 2;
        // 设置圆弧画笔的宽度
        mPaint.setStrokeWidth(mRoundWidth);
        // 设置为 ROUND
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        // 设置画笔颜色
        mPaint.setColor(mRoundColor);
        mPaint.setStyle(Paint.Style.STROKE);
        // 半径
        int radius = (int) (centerX - mRoundWidth);
        RectF oval = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
        // 画背景圆弧
        canvas.drawArc(oval, mStartAngle, mSweepAngle, false, mPaint);
     }    

1、Paint相关类
1.1设置颜色
• paint.setColor(Color.parseColor(“#009688”));
• canvas.drawRect(30, 30, 230, 180, paint);

• paint.setColor(Color.parseColor(“#FF9800”));
• canvas.drawLine(300, 30, 450, 180, paint);

• paint.setColor(Color.parseColor(“#E91E63”));
• canvas.drawText(“HenCoder”, 500, 130, paint);
1.2setShader(Shader shader) 设置 Shader
在 Android 的绘制里使用 Shader ,并不直接用 Shader 这个类,而是用它的几个子类。具体来讲:LinearGradient RadialGradient SweepGradient BitmapShader ComposeShader
1.2.1 LinearGradient 线性渐变
设置两个点和两种颜色,以这两个点作为端点,使用两种颜色的渐变来绘制颜色。就像这样:
Shader shader = new LinearGradient(100, 100, 500, 500, Color.parseColor(“#E91E63”),
Color.parseColor(“#2196F3”), Shader.TileMode.CLAMP);
paint.setShader(shader);
canvas.drawCircle(300, 300, 200, paint);
构造方法:
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
1.2.2 RadialGradient 辐射渐变
辐射渐变很好理解,就是从中心向周围辐射状的渐变。
Shader shader = new RadialGradient(300, 300, 200, Color.parseColor(“#E91E63”),
Color.parseColor(“#2196F3”), Shader.TileMode.CLAMP);
paint.setShader(shader);
canvas.drawCircle(300, 300, 200, paint);

构造方法:
RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)。
1.2.3 BitmapShader
其实也就是用 Bitmap 的像素来作为图形或文字的填充
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.batman);
Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setShader(shader);
canvas.drawCircle(300, 300, 200, paint);

1.3 设置paint 效果
1.3.1 setStyle(Paint.Style style)
抗锯齿默认是关闭的,如果需要抗锯齿,需要显式地打开。另外,除了 setAntiAlias(aa) 方法,打开抗锯齿还有一个更方便的方式:构造方法。创建 Paint 对象的时候,构造方法的参数里加一个 ANTI_ALIAS_FLAG的 flag,就可以在初始化的时候就开启抗锯齿。
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
1.3.2 setStyle(Paint.Style style)
填充模式
paint.setStyle(Paint.Style.FILL); // FILL 模式,填充
canvas.drawCircle(300, 300, 200, paint);
paint.setStyle(Paint.Style.STROKE); // STROKE 模式,画线
canvas.drawCircle(300, 300, 200, paint);
paint.setStyle(Paint.Style.FILL_AND_STROKE); // FILL_AND_STROKE 模式,填充 + 画线
canvas.drawCircle(300, 300, 200, paint);
1.3.3线条形状
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
canvas.drawCircle(150, 125, 100, paint);
paint.setStrokeWidth(5);
canvas.drawCircle(400, 125, 100, paint);
paint.setStrokeWidth(40);
canvas.drawCircle(650, 125, 100, paint);
1.3.4线条效果
setPathEffect(PathEffect effect)
PathEffect pathEffect = new DashPathEffect(new float[]{10, 5}, 10);
paint.setPathEffect(pathEffect);
canvas.drawCircle(300, 300, 200, paint);

1.4 drawText() 相关
Paint 有些设置是文字绘制相关的,即和 drawText() 相关的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值