Android圆环图表根据时间戳填充多种颜色

时间:2018-03-27 07:19:45

标签: java android google-fit donut-chart

我正在寻找一个图表,它会在那个时间周围显示一个圆圈,例如 12:00,01:00 。根据活动时间填充一些颜色。 我找到了这个链接Create Doughnut Chart Similar to Google Fit,但它不符合我的要求。

请在下面找到图片。这就是我期待图表的方式。

enter image description here

此处这些颜色代表基于时间的某些活动。我有一组带有时间戳和活动类型的数据。

有谁能告诉我如何绘制这张图表?这有什么例子吗?

修改

我找到此链接http://www.androidtrainee.com/draw-android-clock-pie-chart-with-animation/来绘制时钟饼视图。但坚持设置宽度和填充颜色,如上图所示。现在它根据时间以完整的圆圈填充不同的颜色。但是如何设置此时钟的宽度以填充颜色和中心部分空白以显示 08:40

3 个答案:

答案 0 :(得分:7)

由于这些是非常具体的要求,因此您可能需要在Android上创建自己的自定义视图。您链接的SO有一些有前途的库链接,包括fit-chart。文档不是很好,但似乎支持使用1%步长的值添加图表部分。

因此,您只需要将持续时间数据转换为圆圈的百分比,使用60分钟或12小时作为100%。

以下是拟合图表的相关用法部分:

Collection<FitChartValue> values = new ArrayList<>();
values.add(new FitChartValue(30f, 0x2d4302)); // 30f seems to represent 30%
final FitChart fitChart = (FitChart)findViewById(R.id.fitChart);
fitChart.setValues(values);

另一个看起来很有前途的库是MPAndroidChart,它支持详细的饼图

关于考虑时间:有很多关于如何绘制模拟时钟的教程,其中应包括如何围绕圆圈定位文本的计算。这是一个SO creating a CustomClock View,其中包含多个教程。

关于设置自定义视图,this 2d-donut-chart tutorial根据Path.arcTo绘制图表涵盖了所有必需的步骤。

如果您需要进一步的帮助,如果您添加数据结构和已尝试的内容将会很有帮助。但我希望通过这些库和教程,您可以创建所需的视图。

关于更新的问题:我建议您创建自己的自定义视图。我最好的建议是继续比较ClockPieView.onDraw和我提到的其他库的绘制方法,这些库绘制带孔的圆环图。研究如何使用您的特定位置将文本呈现为onDraw的一部分。

答案 1 :(得分:0)

答案 2 :(得分:-1)

您可以自定义MPAndroidChart库的饼图来创建它。 Here 是使用它创建的类似的。 在这里您可以找到库的documentationthis演示应用程序也很有帮助。

以下是将MPAndroid图表库添加到项目后可以尝试的示例代码。

class customer_database(models.Model):

    customer_id = models.CharField(max_length=20, unique=True)
    customer_name = models.CharField(max_length=20)
    customer_email = models.EmailField()

    def __str__(self):
        return self.customer_id


class order_database(models.Model):

    order_number = models.CharField(max_length=10, unique=True, primary_key=True)
    order_timestamp = models.DateTimeField()
    order_consignment_number = models.CharField(max_length=20)
    order_customer = models.ForeignKey(customer_database, on_delete=models.CASCADE)

    def __str__(self):
        return self.order_number


class track_database(models.Model):

    order_status = models.ForeignKey(order_database, on_delete=models.CASCADE)
    status_updation = models.CharField(max_length=30)
    status_timestamp = models.DateTimeField()

    def __str__(self):
        return self.status_updation