gpt4 book ai didi

android - 如何在 Canvas 中只绘制一部分圆弧

转载 作者:行者123 更新时间:2023-11-30 04:12:56 29 4
gpt4 key购买 nike

我正在开发一个模拟时钟小部件,时钟的表盘是一个图像。我想像图像中那样绘制一个弧段(如橙色所示)。

paint.setColor(Color.GREEN);
paint.setStrokeWidth(20);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(100, 100, 200, paint);

我尝试使用 drawcircle 和 drawArc,但无法继续,因为我只想要弧的一部分而不是完整的弧。有什么想法吗?

enter image description here

最佳答案

我做了这门课希望它能帮到你,所有变量都是西类牙语,但它很简单,

构造函数 SemiCirculo 使用半圆的 rgb 和分辨率(半圆的三角形数)作为参数

CalcularPuntosPorcentaje 方法使用圆心、起始角、角宽和 radio 作为参数。

ImprimeCirculo 方法使用 Canvas 作为参数,在使用前面提到的方法计算出半圆的点后,用于绘制半圆。

CalcularPuntosPorcentaje 方法类似于 CalcularPuntosPorcentaje,但它使用从 0 到 100 的 % 代替起始和宽度角度参数

最后,SetOffset 和 SetColor 用于更改角度和半圆颜色的默认起始点引用

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;


public class SemiCirculo {

private Path circulo;
private Paint color;
private float px, py, radio, anguloI, anchoa,offset;
private int r, g, b;
private int resolucion;
private float puntox[],puntoy[];


public SemiCirculo(int r1, int g1, int b1, int resolucion1) {

this.offset = 0;
this.color = new Paint();
this.r = r1;
this.g = g1;
this.b = b1;
this.color.setColor(Color.rgb(r, g, b));
color.setAntiAlias(true);
circulo = new Path();
this.resolucion = resolucion1;
this.puntox = new float[this.resolucion];
this.puntoy = new float[this.resolucion];
this.anguloI = 0;
this.anchoa = 1;

}

public void SetOffset(float off) {
this.offset = off;
}

public void SetColor(int r1,int g1, int b1){
this.r=r1;
this.g=g1;
this.b=b1;
this.color.setColor(Color.rgb(r, g, b));
}

public void CalcularPuntosPorcentaje(float px1, float py1,
float porcentaje, float radio1) {
this.anguloI = 0 + this.offset;
this.px = px1;
this.py = py1;
this.radio = radio1;
this.anguloI = 0;
this.anchoa = porcentaje / 100 * 360;

this.CalcularPuntos(px, py, anguloI, anchoa, radio);
}

public void CalcularPuntos(float px1, float py1, float anguloI1,
float anchoangulo, float radio1) {
this.anguloI = anguloI1 + this.offset;

this.anchoa = anchoangulo;
this.px = px1;
this.py = py1;
this.radio = radio1 ;

float angulo = 360 - this.anguloI - this.anchoa;

for (int i = 0; i < resolucion; i++) {
this.puntox[i] = this.px - (float) Math.sin(Math.toRadians(angulo))
* this.radio;
this.puntoy[i] = this.py - (float) Math.cos(Math.toRadians(angulo))
* this.radio;
angulo = (360 - this.anguloI - this.anchoa)
+ ((this.anchoa / (float) (this.resolucion)) * (i + 2));
}

this.circulo.reset();

this.circulo.moveTo(this.px, this.py);
for (int i = 0; i < resolucion; i++) {
this.circulo.lineTo(this.puntox[i], this.puntoy[i]);
}

}

public void ImprimeCirculo(Canvas canvas) {

canvas.drawPath(this.circulo, this.color);

}

}

关于android - 如何在 Canvas 中只绘制一部分圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10528672/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com