Achartengine.jar繪製動態圖形一 --餅圖

来源:http://www.cnblogs.com/cmusketeer/archive/2017/12/10/8016561.html
-Advertisement-
Play Games

PS:我們在做安卓程式的時候,免不了會做一些圖形,自己可以選擇自定義view ,就是用Canvas畫,也可以用寫好的jar包,就是achartengine.jar,使用jar包的好處就快速繪製圖形,不用我們計算坐標等,計算坐標就會和數學結合,通過sin,cos等來計算,遇到3維那就更麻煩了,就像Op ...


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分配一個空間。

 

<?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,數據,渲染器);

 

數據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:創建定時器,定時每秒重畫一次

 

 

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

}

 



 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 為方便本地yum的管理,一般都是在公司區域網內搭建本地yum倉庫,實現公司內部快速安裝常用軟體。 步驟如下: 1、搭建要實現本地yum管理的軟體,測試該軟體搭建成功與否; 2、定製rpm包及其相關依賴; 3、搭建本地yum源 4、配置客戶端yum,實現區域網取包安裝。 首先聲明:該本地yum倉庫中的 ...
  • 一、redis的安裝 這裡演示的版本是Redis4.0.6,Linux系統是CentOS6.7,Jdk1.7,Jedis2.8.1 這是官方文檔介紹的安裝方式 下載,解壓,編譯: 二進位文件是編譯完成後在src目錄下,通過下麵的命令啟動Redis服務: 你可以使用內置的客戶端命令redis-cli進 ...
  • 1,下載解壓 tar xf php-7.2.0.tar.gz cd php-7.2.0/ 2,安裝必要的庫 sudo apt-get install libxml2-devsudo apt-get install openssl sudo apt-get install libssl-devsudo ...
  • 一,安裝 adobe flash player sudo apt-get upgradesudo apt-get install flashplugin-installer 二,安裝chrome瀏覽器 1.將下載源添加到系統源中。 sudo wget https://repo.fdzh.org/ch ...
  • 事務4大屬性: 資料庫事務包含ACID,就是 1:原子性(Atomicity):事務是一個完整的操作,要麼一起成功,要麼一起失敗. 2:一致性(Consistency):當事務完成時,數據必須處於一致狀態。 3:隔離性(Isolation):對數據進行修改的所有併發事務是彼此隔離的。 4:持久性(D ...
  • 視圖是一種虛表,使用CREATE VIEW語句來定義視圖,該視圖是基於一個或多個表或視圖的邏輯表。一個視圖本身不包含任何數據, 視圖所基於的表稱為基表。 視圖就相當於一條select 語句,定義了一個視圖就是定義了一個sql語句, 視圖不占空間,使用視圖不會提高性能,但是能簡化sql語句 。 創建視 ...
  • 最近在看SDWebImage源碼,碰到一些比較繞的問題,理解了很久,然後在網上查了些的資料,才算是有了一些理解。在此記錄一下。 源碼如下: block會copy要在block中使用的實變數,而copy會是變數的retainCount + 1,如若在不註意很容易造成迴圈引用。而所謂的迴圈引用的本質就是 ...
  • 最近突然心血如潮開始學了Android破解,初入門,便是將經驗記錄下來。 準備工作: 1、一個登錄簡單APP 在我們破解之前,我們需要做一個簡單的登錄APP,輸入相應的賬號與密碼便是彈出登錄成功的對話框,賬號與密碼不匹配的話則是彈出登錄失敗的對話框,如下圖 由於我之前已經寫了一篇關於製作登錄界面的簡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...