Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义Android AChartEngine图表(在图表中显示文本)_Android_Achartengine - Fatal编程技术网

自定义Android AChartEngine图表(在图表中显示文本)

自定义Android AChartEngine图表(在图表中显示文本),android,achartengine,Android,Achartengine,是否有方法更新饼图(通过achartEngine API生成)中的文本。我想在那里显示百分比。在下面的图片中,我手动更新了它(即60%、30%和10%)以显示给您 我在SimpleSriesRender类中找不到相关的方法。这是我正在使用的代码 CategorySeries categorySeries = new CategorySeries("Chart"); for (int i = 0; i < series.size(); i++) { categorySeries.

是否有方法更新饼图(通过achartEngine API生成)中的文本。我想在那里显示百分比。在下面的图片中,我手动更新了它(即60%、30%和10%)以显示给您

我在SimpleSriesRender类中找不到相关的方法。这是我正在使用的代码

CategorySeries categorySeries = new CategorySeries("Chart");

for (int i = 0; i < series.size(); i++) {
    categorySeries.add(series.get(i), series_data.get(i));
}

DefaultRenderer defaultRenderer = new DefaultRenderer();

defaultRenderer.setBackgroundColor(Color.BLACK);
defaultRenderer.setShowLabels(true);
defaultRenderer.setShowLegend(true);
defaultRenderer.setShowTickMarks(true);
defaultRenderer.setLabelsTextSize(40f);
defaultRenderer.setLegendTextSize(40f);
defaultRenderer.setApplyBackgroundColor(true);

for (int i = 0; i < series_data.size(); i++) {

    SimpleSeriesRenderer simpleSeriesRenderer = new SimpleSeriesRenderer();
    simpleSeriesRenderer.setColor(  chartColor[i]);
    defaultRenderer.addSeriesRenderer(simpleSeriesRenderer);
}
CategorySeries CategorySeries=新的CategorySeries(“图表”);
对于(int i=0;i
您可以创建自定义类,该类扩展了
PieChart
并重写了它的
drawLabel()
(可能是
draw()
)方法:

在图表中心绘制文本“Hello”:

布局(
activity\u main.xml
)用于:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ua.com.omelchenko.chartapplication.MainActivity">

    <RelativeLayout
        android:id="@+id/chart_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </RelativeLayout>

</RelativeLayout>
(当然,这只是演示)


如果在AndroidStudio 2.0及更高版本中,当鼠标指针指向
PieChart
word时,按
Ctrl+LeftMouseButton
,您可以找到许多有关
PieChart
内部组织的有趣信息,例如馅饼中心的坐标等。

谢谢,但此图表中已经出现了标签A:AA、B:BB和C:CC。我想保留它们,但还想在图表中显示文本。您的方法是否可行?这仍然是一个很好的指针,我将检查自定义类是否有可用的内容。只需添加您需要的内容,例如:
canvas.drawText(“我的文本”,100200,newPaint)
-您可以在
drawLabel()
draw()
方法中更改所有内容。
public class AdvancedPieChart extends PieChart {

    public AdvancedPieChart(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) {
        super.drawLabel(canvas, labelText, renderer, prevLabelsBounds, centerX, centerY, shortRadius, longRadius, currentAngle, angle, left, right, color, paint, line, display);

        String additionalText = "Hello";
        Paint textPaint = new Paint();
        textPaint.setColor(Color.WHITE);
        textPaint.setTextSize(18 * Resources.getSystem().getDisplayMetrics().densityDpi / 160f);
        textPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
        Rect bounds = new Rect();
        textPaint.getTextBounds(additionalText, 0, additionalText.length(), bounds);
        canvas.drawText(additionalText, this.mCenterX - bounds.width() / 2, this.mCenterY - bounds.height() / 3, textPaint);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ua.com.omelchenko.chartapplication.MainActivity">

    <RelativeLayout
        android:id="@+id/chart_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </RelativeLayout>

</RelativeLayout>
public class MainActivity extends AppCompatActivity {

    private RelativeLayout mPieChartHolder;
    private GraphicalView mChartView;
    private PieChart mPieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String[] names = new String[] { "Category 1", "Category 2", "Category 3" };
        double[] values = { 20, 30, 50 };
        int[] colors = { Color.RED, Color.GREEN, Color.BLUE };

        CategorySeries categorySeries = new CategorySeries("Pie Chart");
        for (int i = 0; i < names.length; i++) {
            categorySeries.add(names[i], values[i]);
        }

        DefaultRenderer defaultRenderer = new DefaultRenderer();
        for (int i = 0; i < values.length; i++) {
            SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
            seriesRenderer.setColor(colors[i]);
            defaultRenderer.setBackgroundColor(Color.BLACK);
            defaultRenderer.setLabelsTextSize(20f);
            defaultRenderer.setLegendTextSize(20f);
            defaultRenderer.setApplyBackgroundColor(true);
            defaultRenderer.addSeriesRenderer(seriesRenderer);
        }

        mPieChart = new AdvancedPieChart(categorySeries, defaultRenderer);
        mChartView = new GraphicalView(this, mPieChart);

        mPieChartHolder = (RelativeLayout) findViewById(R.id.chart_holder);
        mPieChartHolder.addView(mChartView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    }

}