hellocharts-android開源圖表庫(一)線狀圖

来源:http://www.cnblogs.com/520-1314/archive/2016/05/26/5532154.html
-Advertisement-
Play Games

1.效果圖 2.源代碼 MainActivity.java public class MainActivity extends AppCompatActivity { public enum ChartType { LINE_CHART, COLUMN_CHART, PIE_CHART, BUBBL... ...


1.效果圖 2.源代碼 MainActivity.java public class MainActivity extends AppCompatActivity { public enum ChartType { LINE_CHART, COLUMN_CHART, PIE_CHART, BUBBLE_CHART, PREVIEW_LINE_CHART, PREVIEW_COLUMN_CHART, OTHER } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit(); } } public static class PlaceholderFragment extends Fragment implements AdapterView.OnItemClickListener { private ListView listView; private ChartSamplesAdapter adapter; public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); listView = (ListView) rootView.findViewById(android.R.id.list); adapter = new ChartSamplesAdapter(getActivity(), 0, generateSamplesDescriptions()); listView.setAdapter(adapter); listView.setOnItemClickListener(this); return rootView; } @Override public void onItemClick(AdapterView adapter, View view, int position, long id) { Intent intent; switch (position) { case 0: // Line Chart; intent = new Intent(getActivity(), LineChartActivity.class); startActivity(intent); break; case 1: // Column Chart; intent = new Intent(getActivity(), ColumnChartActivity.class); startActivity(intent); break; case 2: // Pie Chart; intent = new Intent(getActivity(), PieChartActivity.class); startActivity(intent); break; default: break; } } private List generateSamplesDescriptions() { List list = new ArrayList(); list.add(new ChartSampleDescription("Line Chart", "This is Line Chart", ChartType.LINE_CHART)); list.add(new ChartSampleDescription("Column Chart", "This is Column chart", ChartType.COLUMN_CHART)); list.add(new ChartSampleDescription("Pie Chart", "This is Pie Chart", ChartType.PIE_CHART)); return list; } } public static class ChartSamplesAdapter extends ArrayAdapter { public ChartSamplesAdapter(Context context, int resource, List objects) { super(context, resource, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(getContext(), R.layout.list_item_sample, null); holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.text1); holder.text2 = (TextView) convertView.findViewById(R.id.text2); holder.chartLayout = (FrameLayout) convertView.findViewById(R.id.chart_layout); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ChartSampleDescription item = getItem(position); holder.chartLayout.setVisibility(View.VISIBLE); holder.chartLayout.removeAllViews(); AbstractChartView chart; switch (item.chartType) { case LINE_CHART: chart = new LineChartView(getContext()); holder.chartLayout.addView(chart); break; case COLUMN_CHART: chart = new ColumnChartView(getContext()); holder.chartLayout.addView(chart); break; case PIE_CHART: chart = new PieChartView(getContext()); holder.chartLayout.addView(chart); break; case BUBBLE_CHART: chart = new BubbleChartView(getContext()); holder.chartLayout.addView(chart); break; default: chart = null; holder.chartLayout.setVisibility(View.GONE); break; } if (null != chart) { chart.setInteractive(false);// Disable touch handling for chart on the ListView. } holder.text1.setText(item.text1); holder.text2.setText(item.text2); return convertView; } private class ViewHolder { TextView text1; TextView text2; FrameLayout chartLayout; } } public static class ChartSampleDescription { String text1; String text2; ChartType chartType; public ChartSampleDescription(String text1, String text2, ChartType chartType) { this.text1 = text1; this.text2 = text2; this.chartType = chartType; } } } LineChartActivity.java public class LineChartActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_line_chart); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit(); } } /** * A fragment containing a line chart. */ public static class PlaceholderFragment extends Fragment { private LineChartView chart; private LineChartData data; private int numberOfLines = 1; private int maxNumberOfLines = 4; private int numberOfPoints = 12; float[][] randomNumbersTab = new float[maxNumberOfLines][numberOfPoints]; private boolean hasAxes = true; private boolean hasAxesNames = true; private boolean hasLines = true; private boolean hasPoints = true; private ValueShape shape = ValueShape.CIRCLE; private boolean isFilled = false; private boolean hasLabels = false; private boolean isCubic = false; private boolean hasLabelForSelected = false; private boolean pointsHaveDifferentColor; public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); View rootView = inflater.inflate(R.layout.fragment_line_chart, container, false); chart = (LineChartView) rootView.findViewById(R.id.chart); chart.setOnValueTouchListener(new ValueTouchListener()); // 產生一些隨機值。 generateValues(); generateData(); // 禁用視圖重新計算,更多信息參見togglecubic()方法。 chart.setViewportCalculationEnabled(false); resetViewport(); return rootView; } //每一個列的值 private void generateValues() { for (int i = 0; i < maxNumberOfLines; ++i) { for (int j = 0; j < numberOfPoints; ++j) { // randomNumbersTab[i][j] = (float) Math.random() * 100f; randomNumbersTab[i][j] =5; } } } private void resetViewport() { // Reset viewport height range to (0,100) final Viewport v = new Viewport(chart.getMaximumViewport()); v.bottom = 0; v.top = 100; v.left = 0; v.right = numberOfPoints - 1; chart.setMaximumViewport(v); chart.setCurrentViewport(v); } //generate 生成 private void generateData() { List lines = new ArrayList(); for (int i = 0; i < numberOfLines; ++i) { List values = new ArrayList(); for (int j = 0; j < numberOfPoints; ++j) { values.add(new PointValue(j, randomNumbersTab[i][j])); } Line line = new Line(values); line.setColor(ChartUtils.COLORS[i]); line.setShape(shape); line.setCubic(isCubic); line.setFilled(isFilled); line.setHasLabels(hasLabels); line.setHasLabelsOnlyForSelected(hasLabelForSelected); line.setHasLines(hasLines); line.setHasPoints(hasPoints); if (pointsHaveDifferentColor){ line.setPointColor(ChartUtils.COLORS[(i + 1) % ChartUtils.COLORS.length]); } lines.add(line); } data = new LineChartData(lines); if (hasAxes) { Axis axisX = new Axis(); Axis axisY = new Axis().setHasLines(true); if (hasAxesNames) { axisX.setName("Axis X"); axisY.setName("Axis Y"); } data.setAxisXBottom(axisX); data.setAxisYLeft(axisY); } else { data.setAxisXBottom(null); data.setAxisYLeft(null); } data.setBaseValue(Float.NEGATIVE_INFINITY); chart.setLineChartData(data); } private class ValueTouchListener implements LineChartOnValueSelectListener { @Override public void onValueSelected(int lineIndex, int pointIndex, PointValue value) { Toast.makeText(getActivity(), "Selected: " + value, Toast.LENGTH_SHORT).show(); } @Override public void onValueDeselected() { // TODO Auto-generated method stub } } } } 3.xml activity_main.xml fragment_main.xml activity_line_chart.xml fragment_line_chart.xml
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CentOS 7 下載地址:http://mirrors.opencas.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.iso 一、安裝系統 1、本次使用的是Vmware,將CentOS安裝在虛擬機里以下是虛擬機的配置,點擊完成 2、 ...
  • 環境: Sql Server2012 SP3企業版,Windows Server2008 標準版 問題由來: 最近在做DB優化的時候,發現一個存儲過程有非常嚴重的性能問題, 由於整個SP整體邏輯是一個多表關聯的複雜的查詢,整體結構比較複雜的,通過的分析和嘗試, 最後發現問題出在其中一個大表的查詢上實 ...
  • 獲取SQL執行計劃的常見幾種方法 一、獲取庫緩衝區中的執行計劃 1. 查詢v$sql動態性能視圖,找到要查詢的SQL語句的sql_id。 2. 調用dbms_xplan包的display_cursor方法,查看該語句執行時的執行計劃。 例如: SELECT dname FROM emp, dept ...
  • 利用PL/SQL可以進行模塊化程式設計。 在一個PL/SQL塊中,可以定義若幹個子程式。 把一些功能相對獨立、需要經常執行的代碼定義為一個子程式,在需要時根據子程式的名字進行調用。這樣不僅便於程式設計和編碼,而且利於程式的調試。PL/SQL有兩種形式的子程式,即過程和函數。 在子程式中也可以定義變數 ...
  • 談完並行執行的原理,咱們再來談談優化,到底並行執行能給我們帶來哪些好處,我們又應該註意什麼呢,下麵展開. Amdahl’s Law 再談並行優化前我想有必要談談阿姆達爾定律,可惜老爺子去年已經駕鶴先去了. 其中P:可以並行的百分比 N:演算法並行計算使用的”CPU” 這裡我們舉個簡單的例子,我們來做一 ...
  • 編寫PL/SQL塊的主要目的是對資料庫進行訪問,因此,在PL/SQL塊中可以包含SELECT語句、DML語句,還可以包含DCL語句。需要註意的是,在PL/SQL塊中不能直接包含DDL語句,如果要利用PL/SQL塊完成諸如創建表、修改表結構等操作,需要通過其他方法。通過SQL語句以及流控制語句,可以編 ...
  • 1.下載 mysql-mysql-5.1.55-win32.zip 2. 解壓縮到任何一個目錄,最好目錄名稱不要有空格; 例如:C:\mysql 3. 刪除Embedded,include,lib,mysql-test 這四個目錄。 註:這四個目錄占了300多M,刪除後,只有不到100M。 3,在c... ...
  • 1 NSURLConnettion NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一個抽象. NSURLConnettion是用來指代 Foundation 框架中的一系列組件: NSURLRequest,NSURLResponse,NSUR ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...