Langsung ke konten utama

Android Tutorial - Membuat Chart Menggunakan AChartEngine

Salah satu fitur yang penting dan populer dalam aplikasi mobile adalah visualisasi data. Data dapat divisualisasikan dalam berbagai caranya, salah satunya adalah menggunakan chart. Kali ini saya ingin berbagi bagaimana caranya membuat chart, khususnya line chart menggunakan library AChartEngine. Library ini dapat di unduh dan digunakan secara gratis (open source) di sini.


  1. Buat projek baru.
  2. Copy library AChartEngine yang sudah di unduh dan paste di folder libs projek kalian.
  3. Pada layout yang ingin kalian beri chart (nama layout saya: activity_chart.xml), buat kode xml-nya menjadi seperti ini. Di sini saya buat chartnya berukuran satu layar penuh.
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".ChartActivity"
        android:id="@+id/layout"
        android:orientation="vertical"
        android:background="#fff" >
    
    
    </LinearLayout>
    
  5. Pada kodingan activity kalian (nama activity saya: ChartActivity.java), buat kode java-nya menjadi seperti ini.
  6. package com.example.linechartmodule;
    
    import org.achartengine.ChartFactory;
    import org.achartengine.GraphicalView;
    import org.achartengine.chart.PointStyle;
    import org.achartengine.model.SeriesSelection;
    import org.achartengine.model.XYMultipleSeriesDataset;
    import org.achartengine.model.XYSeries;
    import org.achartengine.renderer.XYMultipleSeriesRenderer;
    import org.achartengine.renderer.XYSeriesRenderer;
    import org.achartengine.tools.ZoomEvent;
    import org.achartengine.tools.ZoomListener;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.graphics.Paint.Align;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class ChartActivity extends Activity {
    
     private GraphicalView mChart;
    
    
      @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_chart);
            
             OpenChart();
         }
        
      private void OpenChart()
         {
          //Definisikan nilai-nilai yang ingin
       //divisualisasikan ke dalam chart
           int x[]={10,18,32,21,48,60,53,80,18,32,21,48,60,53,
             80,18,32,21,48,60,53,8,8,3,2,4,6,3,0,1,3,2,4,6};
          
    
           // Create XY Series for X Series.
          XYSeries xSeries=new XYSeries("X Series");
          
    
          //  Adding data to the X Series.
          for(int i=0;i<x.length;i++)
          {
           xSeries.add(i,x[i]);
          }
    
             // Create a Dataset to hold the XSeries.
          
          XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
          
           // Add X series to the Dataset.   
          dataset.addSeries(xSeries);
          
          
           // Create XYSeriesRenderer to customize XSeries
    
          XYSeriesRenderer Xrenderer=new XYSeriesRenderer();
          Xrenderer.setColor(Color.GREEN);
          Xrenderer.setPointStyle(PointStyle.DIAMOND);
          Xrenderer.setDisplayChartValues(true);
          Xrenderer.setLineWidth(2);
          Xrenderer.setFillPoints(true);
          
          
          // Create XYMultipleSeriesRenderer to customize the whole chart
    
          final XYMultipleSeriesRenderer mRenderer=new XYMultipleSeriesRenderer();
          
          mRenderer.setChartTitle("Judul/Nama Chart");
          mRenderer.setXTitle("X Values");
          mRenderer.setYTitle("Y Values");
          
          //Tambahkan tombol Zoom
          mRenderer.setZoomButtonsVisible(true);
          
          //Kita set 0 agar kita bisa membuat label kita sendiri
          mRenderer.setXLabels(0);
          
          //Agar chart bisa kita geser, kita aktifkan pan
          mRenderer.setPanEnabled(true);
          
          //Jika kita ingin membatasi user menggeser dari koodinat mana sampai mana,
          //kita set panlimit(xMinPanCoor, xMaxPanCoor, yMinPanCoor, yMaxPanCoor)
          mRenderer.setPanLimits(new double[] {0,100,-100,100});
          
          //Agar chart bisa kita zoom, kita aktifkan zoom
          mRenderer.setZoomEnabled(true);
          
          //Kita set biar ada grid yang tampak
          mRenderer.setShowGrid(true);
          
          //Set warna chart, label, axis
          mRenderer.setApplyBackgroundColor(true);
          mRenderer.setBackgroundColor(Color.WHITE);
          mRenderer.setMarginsColor(Color.WHITE);
          mRenderer.setAxesColor(Color.BLACK);
          mRenderer.setLabelsColor(Color.BLACK);
          mRenderer.setXLabelsColor(Color.BLACK);
          mRenderer.setYLabelsColor(0, Color.BLACK);
          
          mRenderer.setXLabelsAlign(Align.CENTER);
          
          mRenderer.setClickEnabled(true);
         
          //Jika kita ingin label hanya ada pada range/nilai tertentu
          //Disini saya set label hanya ada setiap tiga nilai value dalam chart
          for(int i=0;i<x.length;i++)
          {
           if (i%3 == 0)
            {
             mRenderer.addXTextLabel(i, "text"); //label bisa angka, bisa text juga
            }
          }
          
            // Adding the XSeriesRenderer to the MultipleRenderer. 
          mRenderer.addSeriesRenderer(Xrenderer);
       
          
          LinearLayout chart_container=(LinearLayout)findViewById(R.id.layout);
    
        // Creating an intent to plot line chart using dataset and multipleRenderer
          
          mChart=(GraphicalView)ChartFactory.getLineChartView(getBaseContext(), dataset, mRenderer);
          mChart.setBackgroundColor(Color.WHITE);
          
          //Di sini kita buat jika user mengklik suatu nilai values dalam chart,
          //akan nampil Toast nilai yang diklik user
    
          mChart.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View arg0) {
         // TODO Auto-generated method stub
         
         SeriesSelection series_selection=mChart.getCurrentSeriesAndPoint();
         
         if(series_selection!=null)
         {
          int series_index=series_selection.getSeriesIndex();
          
          String select_series="X Series";
          if(series_index==0)
          {
           select_series="X Series";
          }else
          {
           select_series="Y Series";
          }
          
          //String month=mMonth[(int)series_selection.getXValue()];
          
          int amount=(int)series_selection.getValue();
          
          Toast.makeText(getBaseContext(), select_series+"in: "+amount, Toast.LENGTH_LONG).show();
         }
        }
       });
          
    
     // Masukkan chart ke dalam linear layout yang sudah dibuat
          chart_container.addView(mChart);
          
          
         }
    
     }
    
    
Sudah deh, hanya sampai sini doang ko, gampang bukan? :)

Hasilnya nanti akan seperti ini

Line Chart dengan AChartEngine
Line Chart

Zoom In Line Chart dengan AChartEngine
Zoom In

Zoom Out Line Chart dengan AChartEngine
Zoom Out

Sumber belajar ane.


Komentar

Postingan populer dari blog ini

PHP Tutorial - Menjalankan Program .exe "Hello World!" Melalui PHP

Hai semua, saya ingin berbagi ilmu yang saya dapatkan sambil mengerjakan skripsi saya. Pernah tidak, kalian sudah bikin suatu program keren menggunakan bahasa C/C++, tapi kalian harus menjalankannya di SERVER??? Contoh kasus yang membuat Anda melakukan ini apa? Contoh sederhananya membuat Web Service. Di mana operasi perhitungan service yang ditawarkan menggunakan bahasa C/C++. Kalau misal kalian mau bikin make PHP dari awal web servicenya, sebenarnya tidak apa-apa juga, tapi kalau misalkan sudah ada program C/C++-nya, mending make yang sudah ada daripada buat dari awal lagi kan??? :)

Android Tutorial - Membuat Rounded Corner Edit Text

Kali ini saya ingin menmposting tentang bagaimana caranya membuat rounded corner EditText (EditText dengan sudut membulat) di Android. Ikuti saja langkah-langkah berikut:

Android Tutorial - Menambahkan File Gambar ke Image Gallery Emulator Android

Kali ini saya ingin berbagi tentang bagaimana caranya kita bisa memasukkan file (baik itu gambar .jpg, .png, atau musik .mp4, .wav, dll.) tapi tanpa perlu diprogram menggunakan java, cukup lewat Eclipse atau ADTnya saja. Caranya cukup mudah ko.