AndroidPlot - 标签和文字

时间:2014-06-06 22:13:03

标签: androidplot

我是Android和iOS内置应用程序的非开发人员产品经理。我们在iOS中有一个条形图,它提供了图形内容的文本。它显示每个条形的总计,以及每个条形的每个分段的百分比。

在Android中,使用AndroidPlot(我明白了)我们只显示具有不同颜色段的条形图,而不显示百分比总数或总计。开发商告诉我,我们无法展示更多信息。

我会在这里显示图片,但stackoverflow告诉我,我没有足够的声誉点来做这件事。我已经使用图片https://www.dropbox.com/sh/2uocm5bn79rerbe/AAB7s9QEEYIRIgXhKbUAaOyDa

创建了一个指向我的Dropbox的链接

是否可以使用AndroidPlot模拟此iOS图表或至少向最终用户表示相同的信息?

1 个答案:

答案 0 :(得分:1)

您的开发人员或多或少是正确的,但您有选择权。默认情况下,Androidplot的BarRenderer仅在每个条形图的顶部提供一个可选标签,在iOS图像中,该标签由“可用”,“新”,“已使用”和“租用”标签占据。该标签似乎在您的Android屏幕截图中未使用,因此一个选项就是利用这些标签显示总计。

只要将iOS实现与Androidplot完全匹配,缺少的部分就是能够在每个条形的一侧水平和垂直添加其他标签。您可以通过覆盖它的onRender(...)方法来扩展BarRenderer。 Here's a link为您的开发人员显示他希望在代码中修改onRender(...)的位置。

我建议这些修改添加垂直标签:

  1. 调用Canvas.save(Canvas.ALL_SAVE_FLAG)来存储画布的默认方向。
  2. 使用Canvas.translate(leftX,bottom)以栏的左下角为中心
  3. 使用Canvas.rotate(90)将画布旋转90度以启用垂直文本绘制
  4. 在图的一侧绘制所需的任何文字; 0,0现在对应于条形图的左下角,因此在调用canvas.drawText(x,y)时从那里开始。
  5. 调用Canvas.restore()以恢复画布的“原始方向。”
  6. 执行上述操作后,添加水平“%”标签应该是不言而喻的,但如果遇到麻烦,请随时提出更多问题。

    更新: 这是上面的一个非常基本的实现。首先是drawVerticalText方法:

        /**
         * 
         * @param canvas
         * @param paint paint used to draw the text
         * @param text the text to be drawn
         * @param x x-coord of where the text should be drawn
         * @param y y-coord of where the text should be drawn
         */
        protected void drawVerticalText(Canvas canvas, Paint paint, String text, float x, float y) {
    
            // record the state of the canvas before the draw:
            canvas.save(Canvas.ALL_SAVE_FLAG);
    
            // center the canvas on our drawing coords:
            canvas.translate(x, y);
    
            // rotate into the desired "vertical" orientation:
            canvas.rotate(-90);
    
            // draw the text; note that we are drawing at 0, 0 and *not* x, y.
            canvas.drawText(text, 0, 0, paint);
    
            // restore the canvas state:
            canvas.restore();
        }
    

    剩下的就是在必要时调用此方法。在您的情况下,每个BarGroup应该执行一次,并且应该在y轴上保持一致的位置。我将以下代码添加到BarRenderer.onRender(...)中的STACKED案例中,紧接在中断之上:

                    // needed some paint to draw with so I'll just create it here for now:                
                    Paint paint = new Paint();
                    paint.setColor(Color.WHITE);
                    paint.setTextSize(PixelUtils.spToPix(20));
                    drawVerticalText(
                            canvas, 
                            paint, 
                            "test", 
                            barGroup.leftX, 
                            basePositionY - PixelUtils.dpToPix(50)); // offset so the text doesnt intersect with the origin
    

    这是结果的截图...对不起它太大了: enter image description here

    就个人而言,我并不关心这些垂直标签的固定y位置,而是希望它们沿着条形的上部浮动。为了实现这一点,我将drawVerticalText(...)的调用修改为如下所示:

                    // needed some paint to draw with so I'll just create it here for now:
                    Paint paint = new Paint();
                    paint.setColor(Color.WHITE);
                    paint.setTextSize(PixelUtils.spToPix(20));
    
                    // right-justify the text so it doesnt extend beyond the top of the bar
                    paint.setTextAlign(Paint.Align.RIGHT);
                    drawVerticalText(
                            canvas,
                            paint,
                            "test",
                            barGroup.leftX,
                            bottom);
    

    产生这个结果: enter image description here