2013-07-24 47 views
0

DefaultRenderer.setTextTypeface(Typeface)似乎不起作用,這是一個已知的問題?我在我的應用程序中使用了非常相同的字體,因此100%都是正確的。但是如果我將它傳遞給渲染器,則沒有任何變化。使用接受標準系統字體的其他setTextTypeface()似乎也不起作用。AChartEngine 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

考慮到這隻適用於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)); 
+0

什麼是偉大的方式,感謝 –

2

這是在更新一個新的特徵achartengine-1.1.0.jar加入 Change text font by setting a Typeface object。那麼

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

希望這對您有所幫助..

+0

-

添加的新方法

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

所以請您update庫,並按照代碼,我能說什麼? :-) 首先,你可以從源頭看到我使用這個函數_am_。其次,你可以看到我使用這個庫版本的問題。第三,你可以從編輯的問題中看到有些圖表工作正常,只有PieChart有問題...... :-) –