Achartengine.jar は動的なグラフィックスを描画します - 円グラフ

PS: Android プログラムを実行していると、必然的にグラフィックスが作成されます。ビューをカスタマイズするか、つまり Canvas を使用して描画するか、または作成された jar パッケージ (achartengine.jar) を使用するかを選択できます。jar パッケージを使用する利点は、グラフィックスをすばやく描画できることです。座標などを計算する必要がありません。計算された座標は数学と組み合わせられます。sin、cos などで計算されるため、3D に遭遇するとさらに面倒になります。

上記のレンダリング:

画像

ステップ:

1: まず、jar パッケージを見つけて achartengine.jar をインポートし、プロジェクトの libs ディレクトリに置きます。忘れずに追加してください。

ダウンロードアドレス: http://download.csdn.net/download/jjhahage/10114288

2: activity_main.xml ファイルを作成し、ビューにスペースを割り当てます。

<?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 ファイルを作成します。ここでは最初に重要なコードを示し、次に全体のコードを示します。

 @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, data, renderer); です。

データgetData();

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

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

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


        return cs;
    }

レンダラー 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: タイマーを作成し、一定の間隔で 1 秒ごとに再描画します

 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();//重画,不写就不会显示动态变化



    }

4: 合計コード

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;
    }

}

おすすめ

転載: blog.csdn.net/Gaga246/article/details/131781773