AChartEngine setTextTypeface不工作?

时间:2013-07-24 11:24:17

标签: android achartengine

DefaultRenderer.setTextTypeface(Typeface)似乎不起作用,这是一个已知问题吗?我在我的应用程序中使用了相同的字体,所以100%可以。但是,如果我将它传递给渲染器,则没有任何变化。使用接受标准系统字体的其他setTextTypeface()似乎也不起作用。

一些源代码,虽然它不仅仅是直截了当的:

DefaultRenderer renderer = new DefaultRenderer();
renderer.setAntialiasing(true);
renderer.setChartTitle(title);
...
renderer.setTextTypeface(MyApplication.getInstance().font.condensedNormal);
renderer.setShowLabels(true);
...

没有错误,没有消息,只是字体没有改变,我收到了系统字体。

版本1.1.0,我能找到的最新版本。

附录:经过一些测试,只有PieChart有问题。其他人似乎都接受了字体。

2 个答案:

答案 0 :(得分:2)

考虑到这仅适用于PieChart,我想我可以说这是AChartEngine中的一个错误。在可以修复之前,我找到了以下解决方法:

public class CustomPieChart extends org.achartengine.chart.PieChart {
  private static final long serialVersionUID = 1L;

  public CustomPieChart(CategorySeries dataset, DefaultRenderer renderer) {
    super(dataset, renderer);
  }

  @Override
  protected void drawLabel(Canvas canvas, String labelText, DefaultRenderer renderer, List<RectF> prevLabelsBounds, int centerX, int centerY, float shortRadius, float longRadius, float currentAngle, float angle, int left, int right, int color, Paint paint, boolean line, boolean display) {
    paint.setTypeface(...typeface...);
    super.drawLabel(canvas, labelText, renderer, prevLabelsBounds, centerX, centerY, shortRadius, longRadius, currentAngle, angle, left, right, color, paint, line, display);
  }

  @Override
  protected int drawLegend(Canvas canvas, DefaultRenderer renderer, String[] titles, int left, int right, int y, int width, int height, int legendSize, Paint paint, boolean calculate) {
    paint.setTypeface(...typeface...);
    return super.drawLegend(canvas, renderer, titles, left, right, y, width, height, legendSize, paint, calculate);
  }

  @Override
  public void drawTitle(Canvas canvas, int x, int y, int width, Paint paint) {
    paint.setTypeface(...typeface...);
    super.drawTitle(canvas, x, y, width, paint);
  }
}

然后,而不是使用ChartFactory,而不是像这样手动实例化它:

view = new GraphicalView(context, new CustomPieChart(dataset, renderer));

答案 1 :(得分:2)

这是achartengine-1.1.0.jar中更新的新功能 的 Change text font by setting a Typeface object

添加了新方法

public void setTextTypeface(android.graphics.Typeface typeface)
// Sets the text typeface.

Parameters:
typeface - the typeface

所以请update你的图书馆并按照代码 -

Typeface myNewFace = Typeface.createFromAsset(getAssets(), "abc.ttf");
renderer.setTextTypeface(myNewFace);

希望这对你有帮助..