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