当前位置: 首页 > 面试题库 >

Android用2种颜色绘制圆(饼图)

欧阳昊焱
2023-03-14
问题内容

这是我在stackoverflow.com上遇到的第一个问题,所以请原谅我做错了什么。

我想创建一个基本上像进度条的圆圈。现在,我想通过一些代码设置百分比。

我想要实现的是:https : //raw.github.com/psud/Melde-App/master/res/drawable-
hdpi/circlemiddle.png

我的问题:

  1. 无法使用两种颜色的圆圈工作(已经在论坛上搜索了几个小时,并且找到了类似于我的问题的解决方案,但我只是无法在我的应用程序中实现这些解决方案。我已经阅读了很多有关canvas的文章。 drawArc(…),但似乎找不到使用方法)。
  2. 如何将画布放入布局中?(我有一个xml布局,应该在特定布局内绘制画布,而不更改其余布局)。

谢谢。


问题答案:

这只是一个提示。这只是一个在同一矩形上绘制两个弧的视图:第一个弧的角度范围为0到360。第二个弧的角度范围(从第一个角度开始)从0到一个角度,该角度取决于百分比。

public class PercentView extends View {

    public PercentView (Context context) {
        super(context);
        init();
    }
    public PercentView (Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public PercentView (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    private void init() {
        paint = new Paint();
        paint.setColor(getContext().getResources().getColor(R.color.lightblue));
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
        bgpaint = new Paint();
        bgpaint.setColor(getContext().getResources().getColor(R.color.darkblue));
        bgpaint.setAntiAlias(true);
        bgpaint.setStyle(Paint.Style.FILL);
        rect = new RectF();
    }
    Paint paint;
    Paint bgpaint;
    RectF rect;
    float percentage = 0;
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //draw background circle anyway
        int left = 0;
        int width = getWidth();
        int top = 0;
        rect.set(left, top, left+width, top + width); 
        canvas.drawArc(rect, -90, 360, true, bgpaint);
        if(percentage!=0) {
            canvas.drawArc(rect, -90, (360*percentage), true, paint);
        }
    }
    public void setPercentage(float percentage) {
        this.percentage = percentage / 100;
        invalidate();
    }
}

添加到您的布局:

<bla.bla.PercentView
            android:id="@+id/percentview"
            android:layout_width="100dp"
            android:layout_height="100dp" />


 类似资料:
  • 我想通过在android中使用xml来制作类似的东西。我用45度的渐变实现了类似的效果,但我不想要渐变,而是像这样的素色。非常感谢您的任何建议。提前谢谢。 这就是我想用xml做的。 我需要很多这样的,所以我不能在绘图文件夹中加载位图。] 1

  • 我知道我可以只打印出图像,但我想找出玩家何时与不正确的颜色碰撞(就像颜色切换中的做法一样),以便他们在这种情况下失败,我假设如果我使用图片是不可能的。我该怎么做?

  • 我正试图用PDFbox绘制饼图,但各片之间有白线,有人能帮我吗?是否有此选项? 附上我正在使用的绘制圆弧的代码: 结果的附加图像: 谢啦

  • 我正在做一个简单的绘画程序。 我正在绘制一个自定义位图,然后用onDraw方法将这个位图绘制到画布上。 自定义位图和画布创建: 当有人触摸屏幕时,会画一个圆圈: 这很好,但每次在屏幕上绘制位图时,每个圆都有相同的颜色(绘制当前颜色): 所以如果我有一个红色的圆圈,将颜色更改为蓝色并绘制另一个圆圈,位图中的两个圆圈都是蓝色的。为什么会这样?我该如何解决这个问题?

  • 我使用下面的POV-Ray循环在其他颜色空间绘制sRGB坐标。环路只沿着外表面产生点,然后用三角形连接它们。因为sRGB空间是一种扭曲的立方体,这意味着6个外表面和8个顶点。 这很有效,因为几乎所有的颜色空间都是三维的。以下是一个输出示例: 不过,我想对CMYK颜色空间也这么做。我遇到的问题是,它有4个参数,而不是3个。同样,我只想在最外面的曲面上绘制点,并用三角形连接它们。我不认为产生的颜色立体

  • 问题内容: 我必须使用pdfbox绘制一个饼图。 令数据为: 主题分数百分比累计分数 Sub-1 80 80 80 Sub-2 70 70150 Sub-3 65 65215 Sub-4 90 90305 Sub-5 55 55360 令半径和中心为100像素和(250,400)。 让我们取平行于x轴的初始线。 绘图的初始线条语句将为: contentStream.drawLine(250,400