关于自定义view遇到的一些问题

通常情况下,有以下三种方法来实现自定义控件:

  • 对现有控件进行拓展
  • 通过组合来实现新的控件
  • 重写view来实现全新的控件

RectF arcRectF=new RectF(
						(float) (length*0.1),
						(float) (length*0.1),
						(float) (length*0.9),
						(float) (length*0.9));

RectF构造函数为(float left,float top,float right,float bottom);
二维坐标为弧形的外接矩形
在这里插入图片描述

Paint.setStyle(…);

  • Paint.Style.STROKE:只绘制图形轮廓(描边)
  • Paint.Style.FILL 只绘制图形内容
  • Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容
		//绘制圆
        canvas.drawCircle(circleXY,circleXY,radius,circlePaint);
                        //圆心的X坐标,圆心的Y坐标,半径,画笔对象的属性
		//绘制弧线
        canvas.drawArc(arcRectF,270,sweepAngle,false,arcPaint);
                    //RectF oval:圆弧的形状和大小的范围,
                    //float startAngle:圆弧是从哪个角度来顺时针绘画的
                    //float sweepAngle:设置圆弧扫过的角度
                    //boolean useCenter:设置圆弧在绘画的时候,是否经过圆形
                    //Paint paint 画笔对象的属性

在这里插入图片描述

		//绘制文字
        canvas.drawText(showText,0,showText.length(),circleXY,circleXY+(showTextSize/4),textPaint);
        //float y为baseline(基线)

baseline(基线)


int specMode=MeasureSpec.getMode(measureSpec);
  • MeasureSpec.AT_MOST:最大值模式,指定为warp_parent,控件大小随着控件的子控件大小或内容的变化而变化
  • MeasureSpec.EXACTLY精确值模式,指定为具体数值或math_parent时使用的是此模式
  • MeasureSpec.UNSPECIFIED不指定其大小测量模式,通常情况下在绘制自定义view时才会使用

//渐变渲染器
LinearGradient linearGradient=new LinearGradient(0,0,viewWidth,0,new int[]{Color.BLUE,0xfffff000,Color.GREEN}, null, Shader.TileMode.REPEAT);
  • Shader.TileMode.REPEAT:表示,当我们绘制的图形尺寸大于Bitmap尺寸时,会用Bitmap重复平铺整个绘制的区域。
  • Shader.TileMode.CLAMP表示,当所画图形的尺寸大于Bitmap的尺寸的时候,会用Bitmap四边的颜色填充剩余空间。
  • Shader.TileMode.MIRROR与Shader.TileMode.REPEAT类似,当绘制的图形尺寸大于Bitmap尺寸时,MIRROR也会用Bitmap重复平铺整个绘图区域,与REPEAT不同的是,两个相邻的Bitmap互为镜像。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值