1.
public Rect(int left, int top, int right, int bottom) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
4个属性
1.public int left;
2.public int top;
3.public int right;
4.public int bottom;
![](https://img.haomeiwen.com/i13299289/7c26fa4cf13c21b6.png)
![](https://img.haomeiwen.com/i13299289/80152bd9be366289.png)
![](https://img.haomeiwen.com/i13299289/0bc3be9149bb01fc.png)
这四个属性不单单描述了这个 长方形4个点的坐标,间接的描述出这个长方形的尺寸
长 = bottom - top
宽 = right – left
2.
canvas.drawRoundRect(rect, 200f, 200f, mPaint)
2个属性
float rx:生成圆角的椭圆的X轴半径
float ry:生成圆角的椭圆的Y轴半径
![](https://img.haomeiwen.com/i13299289/477da89b61080c82.png)
3.
public void drawText (String text, float x, float y, Paint paint)
2个属性
1.public float x;
2.public float y;
x,y并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)
https://cloud.tencent.com/developer/article/1742083
package com.example.myapplication;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import androidx.annotation.Nullable;
/**
* @author Administrator
* @version V1.0
* @date 2023/9/7
* @Description:
*/
public class TestView extends View {
private Paint paint;
private Rect rect;
private Paint rectPaint;
public TestView(Context context) {
super(context);
intView();
}
public TestView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
intView();
}
public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
intView();
}
public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
intView();
}
private void intView() {
paint = new Paint();
paint.setAlpha(50);
paint.setColor(Color.parseColor("#FF018786"));
paint.setAntiAlias(true);
paint.setTextSize(90);
paint.setTextAlign(Paint.Align.CENTER);
rectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
rectPaint.setColor(Color.parseColor("#FFBB86FC"));
rectPaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
String str = "test富发牌嘎嘣看";
canvas.drawText(str,getWidth()/2,getHeight()/2,paint);
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
float ascent = fontMetrics.ascent;
int descent = (int) (fontMetrics.descent);
float leading = fontMetrics.leading;
int strHeight = (int) (descent - ascent - leading);
int screenWith = getResources().getDisplayMetrics().widthPixels;
int screenHeigh = getResources().getDisplayMetrics().heightPixels;
rect = new Rect();
paint.getTextBounds(str, 0, str.length(), rect);
int strWidth = rect.width();
int startX = (screenWith - strWidth) / 2;
int startY = (screenHeigh - strHeight) / 2;
canvas.drawRect(startX , startY - strHeight, startX + strWidth, startY , rectPaint);
}
}
给圆设置了路径宽度,便需要该路径宽度也计算在内:所以这个圆的半径事实上应该是:View宽度/2 - 路径宽度/2, 只有这样才能容纳要绘制的View,否则多余的部分就看不见了。(包括圆环)
mPaint.setColor(mDownloadBackgroundRingColor);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mDownloadBackgroundRingSize);
float cx = mViewWidth / 2;
float cy = mViewHeight / 2;
float radius = mViewWidth / 2 - mDownloadBackgroundRingSize / 2;
canvas.drawCircle(cx, cy, radius, mPaint);
// Draw progress ring
mPaint.setColor(mDownloadProgressBarColor);
float margin = mDownloadBackgroundRingSize / 2;
mDownloadBackgroundRingRect.set(margin, margin, mViewWidth - margin, mViewHeight - margin);
canvas.drawArc(mDownloadBackgroundRingRect, -90, 90, false, mPaint);
![](https://img.haomeiwen.com/i13299289/b429ad9f0e46777d.png)
![](https://img.haomeiwen.com/i13299289/53d5adb7e86ae9a4.png)
![](https://img.haomeiwen.com/i13299289/a2ce4d0b6febf37a.jpg)
网友评论