• Achartengine.jar绘制动态图形-饼图


    
    

    Achartengine.jar绘制动态图形一 --饼图

    
    

    PS:我们在做安卓程序的时候,免不了会做一些图形,自己可以选择自定义view ,就是用Canvas画,也可以用写好的jar包,就是achartengine.jar,使用jar包的好处就快速绘制图形,不用我们计算坐标等,计算坐标就会和数学结合,通过sin,cos等来计算,遇到3维那就更麻烦了,就像OpenGL一样,空间视角,三维制作,我的博客里也有一些,感兴趣的小火鸡可以看一下,

    
    

    上效果图:

    
    

    
    

    步骤:

    
    

    1:首先找到jar包,导入achartengine.jar,放在项目的libs目录下即可,记得要添加一下呦。

    
    

    下载地址:http://download.csdn.net/download/jjhahage/10114288

    
    

    2:创建activity_main.xml文件,给view分配一个空间。

    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?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>
    
    
    
    
    
    
    
    
    
    
    

    创建MainActivity.java文件。这里先拿出重要代码,后面有总代码。

    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @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):创建这个饼图方法就是getPieChartView(this,数据,渲染器);

    
    
    
    
    

    数据getData();

    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //创建饼图
       public CategorySeries getData()
       {
     
           cs = new CategorySeries("第一个饼图");
     
           cs.add("黄金",30);
           cs.add("铂金",10);
           cs.add("黑金",60);
     
     
           return cs;
       }
    
    
    
    
    


    渲染器getRenderer();

    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    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:创建定时器,定时每秒重画一次

    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    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);// 执行任务, 一秒一次
    
    
    
    
    

    注释的代码,可以写也可以不写,写了也不会出错。

    
    
     //模拟动态赋值,
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        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:总代码

    
    
    
    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    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;
        }
     
    }
     
    还有折线图 柱状图等,可以百度相关jar包
     
  • 相关阅读:
    VS 2005中 讨厌的"异常助手"
    三步一计与一步三计
    S+S 的微软定义
    PMBOK2004版44个过程的工具和技术的总结
    如何在WCF中使用自定义的Header,(典型场景:业务系统的登陆与使用)
    SaaS模式探讨
    SQL 2005的row_number,(oracle 的 rownum)
    关于Django的登录系统
    CSRF Failed: Referer checking failed no Referer
    docker 入门笔记
  • 原文地址:https://www.cnblogs.com/wangying222/p/8026959.html
Copyright © 2020-2023  润新知