最近在做用户引导功能,该功能用了大量的画笔操作,所以在此记录下 Paint和 Canves 的用法。
//先定义画笔
Paint mPaint = new Paint();
mPaint.setColor(Color.BLACK); //设置画笔颜色
Canves 画线
mPaint.setStyle(Paint.Style.FILL); //设置画笔模式为填充
mPaint.setStrokeWidth(2f); //设置画笔宽度
canvas.drawLine(startX,startY,endX,endY,mPaint);
Canves 画矩形
mPaint.setStyle(Paint.Style.STROKE); //设置画笔模式空心 FILL为实心
Rect rect = new Rect(left,top,right,bottom);
canvas.drawRect(rect,mPaint);//画空心矩形
Canves 画圆
mPaint.setStyle(Paint.Style.STROKE); //设置画笔模式空心 FILL为实心
canvas.drawCircle(x,y,d,paint);//x y 为圆心点 d为圆半径
Canves 画文本
mPaint.setTextAlign(Paint.Align.CENTER);//设置文字的对齐方式
mPaint.setTextSize(sp2px(15));//设置文字大小 因为做适配所以用了sp2px的转换
canvas.drawText("测试文字",x , y, mPaint);
//如果要画的文字在 上面的矩形中 那么需要判断y的位置
Paint.FontMetricsInt fontMetrics = mPaint.getFontMetricsInt();//获得文字的大小 设置过字体大小后需要重新获得
int baseline = (rect.bottom + rect.top - fontMetrics.bottom - fontMetrics.top) / 2;// baseline 为画文字时候的 y
canvas.drawText("测试文字",(rect.left+rect.right)/2, baseline, mPaint);
因为用canvas画的时候通常是按像素画的 所以需要下面的 方法进行转换 适配不同分辨率的机型 方法中的 this 需要换成实际应用中的 context
/**
* dp单位转换为px
*/
public int dp2px( float dpValue){
return (int)(dpValue * (this.getResources().getDisplayMetrics().density) + 0.5f);
}
/**
* px单位转换为dp
*/
public int px2dp( float pxValue){
return (int)(pxValue / (this.getResources().getDisplayMetrics().density) + 0.5f);
}
/**
* sp转换成px
*/
private int sp2px( float spValue){
float fontScale=this.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue*fontScale+0.5f);
}
/**
* px转换成sp
*/
private int px2sp( float pxValue){
float fontScale=this.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue/fontScale+0.5f);
}