我正在寻找一个图表,它会在那个时间周围显示一个圆圈,例如 12:00,01:00 。根据活动时间填充一些颜色。 我找到了这个链接Create Doughnut Chart Similar to Google Fit,但它不符合我的要求。
请在下面找到图片。这就是我期待图表的方式。
此处这些颜色代表基于时间的某些活动。我有一组带有时间戳和活动类型的数据。
有谁能告诉我如何绘制这张图表?这有什么例子吗?
我找到此链接http://www.androidtrainee.com/draw-android-clock-pie-chart-with-animation/来绘制时钟饼视图。但坚持设置宽度和填充颜色,如上图所示。现在它根据时间以完整的圆圈填充不同的颜色。但是如何设置此时钟的宽度以填充颜色和中心部分空白以显示 08:40 ?
答案 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)
下面是一个jQuery扩展列表来执行此操作: http://www.jquerybyexample.net/2014/02/jquery-html5-library-circular-piechart-graph.html
答案 2 :(得分:-1)
您可以自定义MPAndroidChart库的饼图来创建它。 Here 是使用它创建的类似的。 在这里您可以找到库的documentation,this演示应用程序也很有帮助。
以下是将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