Achartengine.jar draws dynamic graphics one--pie chart

PS: When we are doing Android programs, we will inevitably make some graphics. We can choose a custom view, which is to use Canvas to draw, or we can use the written jar package, which is achartengine.jar. The advantage of using the jar package is to quickly draw graphics. We don’t need to calculate coordinates, etc. The calculated coordinates will be combined with mathematics. Calculated by sin, cos, etc., it will be more troublesome when encountering 3D.

The above renderings:

img

step:

1: First find the jar package, import achartengine.jar, and put it in the libs directory of the project. Remember to add it.

Download address: http://download.csdn.net/download/jjhahage/10114288

2: Create the activity_main.xml file and allocate a space to the view.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.liuzhitong.charttest1_1.MainActivity">

    <LinearLayout
        android:id="@+id/id_layout"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </LinearLayout>
</RelativeLayout>

Create the MainActivity.java file. Here is the important code first, followed by the total code.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题
        setContentView(R.layout.activity_main);
        LinearLayout ll= (LinearLayout) findViewById(R.id.id_layout);
        //创建图表,首先要创建数据源和渲染器,然后让一个方法调用即可,
        view = ChartFactory.getPieChartView(this,getData(),getRenderer());
        ll.addView(view);

(1): The method of creating this pie chart is getPieChartView(this, data, renderer);

data getData();

 //创建饼图
    public CategorySeries getData()
    {
    
    

        cs = new CategorySeries("第一个饼图");

        cs.add("黄金",30);
        cs.add("铂金",10);
        cs.add("黑金",60);


        return cs;
    }

renderer getRenderer();

public DefaultRenderer getRenderer(){
    
    
        //创建渲染器,描绘器对象
        renderer = new DefaultRenderer();

        ssr1 = new SimpleSeriesRenderer();
        ssr2 = new SimpleSeriesRenderer();
        ssr3 = new SimpleSeriesRenderer();
        ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr1.setColor(Color.YELLOW);
        ssr2.setColor(Color.CYAN);
        ssr3.setColor(Color.BLACK);
        renderer.addSeriesRenderer(ssr1);
        renderer.addSeriesRenderer(ssr2);
        renderer.addSeriesRenderer(ssr3);

        renderer.setChartTitle("第一个饼图");
        renderer.setShowLabels(true);//设置显示标签
        renderer.setShowLegend(true);//显示底部说明标签
        renderer.setLabelsTextSize(20);//设置标签字体大小,
        renderer.setAntialiasing(true);//消失锯齿
        renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
        renderer.setBackgroundColor(Color.DKGRAY);
        renderer.setChartTitleTextSize(30);
        renderer.setDisplayValues(true);   //显示数据,这个不写就不会显示出百分比。。
        renderer.setZoomButtonsVisible(true); //显示缩小放大图标

        return renderer;
    }

3: Create a timer and redraw every second at regular intervals

 Timer time=new Timer();

        handler = new Handler() {
    
    // 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
            public void handleMessage(Message msg) {
    
    
                if (msg.what == 1) {
    
    
                    init();// 刷新图表具体方法 Handler将此并入主线程
                }
                //  super.handleMessage(msg);
            }
        };
        TimerTask task = new TimerTask() {
    
    
            public void run() {
    
    // 通过消息更新
                Log.i("task", " task ok ");
                Message message = new Message();
                message.what = 1;// 消息定义标志
                handler.sendMessage(message);
            }
        };

        time.schedule(task,1,1000);// 执行任务, 一秒一次

The commented code can be written or not, and there will be no error if it is written.

 //模拟动态赋值,
    public void init()
    {
    
    


        cs.clear();//清空之前的数据

        Random random = new Random();
        int R1 = random.nextInt(100);
        int R2 = random.nextInt(100);
        int R3 = random.nextInt(100);
        // 设置种类名称和对应的数值,前面是(key,value)键值对
        cs.add("黄金",R1);
        cs.add("铂金",R2);
        cs.add("黑金",R3);
//        renderer = new DefaultRenderer();
//        ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr1.setColor(Color.BLACK);
//        ssr2.setColor(Color.YELLOW);
//        ssr3.setColor(Color.CYAN);
//        renderer.addSeriesRenderer(ssr1);
//        renderer.addSeriesRenderer(ssr2);
//        renderer.addSeriesRenderer(ssr3);

        //让底部说明标签显示,如果不行,那就只会在初始化的时候显示一次
        renderer.setShowLabels(true);//设置显示标签
        renderer.setShowLegend(true);//显示底部说明标签
        renderer.setLabelsTextSize(20);//设置标签字体大小,
        renderer.setAntialiasing(true);//消失锯齿
        renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
        renderer.setBackgroundColor(Color.DKGRAY);
        view.repaint();//重画,不写就不会显示动态变化



    }

4: total code

package cn.liuzhitong.charttest1_1;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Window;
import android.widget.LinearLayout;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;

import java.text.NumberFormat;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    
    

    private GraphicalView view;
    private CategorySeries cs;

    public Handler handler;
    private DefaultRenderer renderer;
    private SimpleSeriesRenderer ssr1;
    private SimpleSeriesRenderer ssr2;
    private SimpleSeriesRenderer ssr3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题
        setContentView(R.layout.activity_main);
        LinearLayout ll= (LinearLayout) findViewById(R.id.id_layout);
        //创建图表,首先要创建数据源和渲染器,然后让一个方法调用即可,
        view = ChartFactory.getPieChartView(this,getData(),getRenderer());
        ll.addView(view);

        Timer time=new Timer();

        handler = new Handler() {
    
    // 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
            public void handleMessage(Message msg) {
    
    
                if (msg.what == 1) {
    
    
                    init();// 刷新图表具体方法 Handler将此并入主线程
                }
                //  super.handleMessage(msg);
            }
        };
        TimerTask task = new TimerTask() {
    
    
            public void run() {
    
    // 通过消息更新
                Log.i("task", " task ok ");
                Message message = new Message();
                message.what = 1;// 消息定义标志
                handler.sendMessage(message);
            }
        };

        time.schedule(task,1,1000);// 执行任务, 一秒一次



    }


    //模拟动态赋值,
    public void init()
    {
    
    


        cs.clear();//清空之前的数据

        Random random = new Random();
        int R1 = random.nextInt(100);
        int R2 = random.nextInt(100);
        int R3 = random.nextInt(100);
        // 设置种类名称和对应的数值,前面是(key,value)键值对
        cs.add("黄金",R1);
        cs.add("铂金",R2);
        cs.add("黑金",R3);
//        renderer = new DefaultRenderer();
//        ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
//        ssr1.setColor(Color.BLACK);
//        ssr2.setColor(Color.YELLOW);
//        ssr3.setColor(Color.CYAN);
//        renderer.addSeriesRenderer(ssr1);
//        renderer.addSeriesRenderer(ssr2);
//        renderer.addSeriesRenderer(ssr3);

        //让底部说明标签显示,如果不行,那就只会在初始化的时候显示一次
        renderer.setShowLabels(true);//设置显示标签
        renderer.setShowLegend(true);//显示底部说明标签
        renderer.setLabelsTextSize(20);//设置标签字体大小,
        renderer.setAntialiasing(true);//消失锯齿
        renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
        renderer.setBackgroundColor(Color.DKGRAY);
        view.repaint();//重画,不写就不会显示动态变化



    }

    //创建饼图
    public CategorySeries getData()
    {
    
    

        cs = new CategorySeries("第一个饼图");

        cs.add("黄金",30);
        cs.add("铂金",10);
        cs.add("黑金",60);


        return cs;
    }
    //创建渲染器
    public DefaultRenderer getRenderer(){
    
    
        //创建渲染器,描绘器对象
        renderer = new DefaultRenderer();

        ssr1 = new SimpleSeriesRenderer();
        ssr2 = new SimpleSeriesRenderer();
        ssr3 = new SimpleSeriesRenderer();
        ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
        ssr1.setColor(Color.YELLOW);
        ssr2.setColor(Color.CYAN);
        ssr3.setColor(Color.BLACK);
        renderer.addSeriesRenderer(ssr1);
        renderer.addSeriesRenderer(ssr2);
        renderer.addSeriesRenderer(ssr3);

        renderer.setChartTitle("第一个饼图");
        renderer.setShowLabels(true);//设置显示标签
        renderer.setShowLegend(true);//显示底部说明标签
        renderer.setLabelsTextSize(20);//设置标签字体大小,
        renderer.setAntialiasing(true);//消失锯齿
        renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
        renderer.setBackgroundColor(Color.DKGRAY);
        renderer.setChartTitleTextSize(30);
        renderer.setDisplayValues(true);   //显示数据,这个不写就不会显示出百分比。。
        renderer.setZoomButtonsVisible(true); //显示缩小放大图标

        return renderer;
    }

}

Guess you like

Origin blog.csdn.net/Gaga246/article/details/131781773