Uso de Android RectF()

Lo estudié esta semana, controles personalizados. Método de pintura , leí el blog del gran dios antes, y siempre he tenido una pregunta, el uso de RecF(), simplemente no lo he entendido. Tomó un poco de tiempo hoy, y probablemente aprendí un poco al respecto a través de pruebas personales.

Ver comentarios del código fuente

Rect F contiene cuatro coordenadas flotantes para un rectángulo. El rectángulo
está representado por las coordenadas de sus 4 bordes (izquierda, arriba,
abajo a la derecha). A estos campos se puede acceder directamente. Use ancho () y
alto () para recuperar el ancho y alto del rectángulo. Nota:
la mayoría de los métodos no verifican que las coordenadas estén ordenadas
correctamente (es decir, izquierda <= derecha y arriba <= abajo).

El rectángulo F contiene cuatro rectángulos de coordenadas flotantes. Las coordenadas del rectángulo representan los 4 lados (izquierda, arriba, abajo a la derecha). A estos campos se puede acceder directamente. Utilice width() y height() para recuperar el ancho y el alto del rectángulo. Nota: la mayoría de los métodos no verifican si las coordenadas están (es decir, ordenadas correctamente, por ejemplo, Izquierda <
= Derecha y Arriba <= Abajo).

Lo anterior es el comentario de archivo de todo el código fuente.

Según tengo entendido, primero mira el código.

public class LoadingView extends View {
    
    

    private int mWidth;
    private int mHeight;

    public LoadingView(Context context) {
        this(context, null);
    }

    public LoadingView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public LoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        if (widthMode == MeasureSpec.EXACTLY) {
   
   //当画布的大小为明确值MATCH_CONTENT
            mWidth = widthSize;
        } else {
            mWidth = SizeUtils.dp2px(200);
        }
        if (heightMode == MeasureSpec.EXACTLY) {
   
   //
            mHeight = heightSize;
        } else {
            mHeight = SizeUtils.dp2px(200);
        }
        setMeasuredDimension(mWidth, mHeight);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setAntiAlias(true);//消除锯齿
        paint.setStrokeWidth(1);//设置画笔的宽度
        paint.setStyle(Paint.Style.STROKE);//设置绘制轮廓
        paint.setColor(Color.parseColor("#2EA4F2"));//设置颜色
        RectF rectF = new RectF(SizeUtils.dp2px(75), SizeUtils.dp2px(75), SizeUtils.dp2px(125), SizeUtils.dp2px(125));
        canvas.drawRect(rectF, paint);
    }
}

representaciones

Escriba la descripción de la imagen aquí

Dibujado según mi propio entendimiento.

Podemos ver que hay cuatro puntos A, B, C y D, que corresponden a un punto en el método RectF(float left, float top, float right, float bottom) . Sin embargo, el ancho del rectángulo en el medio es ancho=C(derecha)-A(izquierda), alto=D(abajo)-B(arriba)

Escriba la descripción de la imagen aquí

El efecto de la imagen se debe principalmente a que quiero lucir bien, así que dibujo los gráficos en el medio del lienzo. El valor del rectángulo se puede probar por sí mismo.

Acho que você gosta

Origin blog.csdn.net/u013290250/article/details/54926669
Recomendado
Clasificación