android開發之圖表

    在這裏使用的插件爲Mpchart,只以折線圖爲例。首先須要導入包。java

    在Layout.xml中設置佈局,以下:android

<?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: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"
    >
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="40.0dip"
         >
   <TextView
            android:id="@+id/text4"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            
            android:text="2016年油耗統計"
            
            android:textSize="15dp" />
   </LinearLayout>
   <com.github.mikephil.charting.charts.LineChart
                android:id="@+id/chart1"
                android:layout_width="match_parent"
                android:layout_height="400dp"
                android:layout_marginTop="20dp" />

</RelativeLayout>

  在Activity中設置數據和圖表的格式。以下:git

package com.example.view;


import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.WindowManager;

import com.example.iov.R;
import com.github.mikephil.charting.charts.BarLineChartBase.BorderPosition;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.utils.Legend;
import com.github.mikephil.charting.utils.Legend.LegendForm;
import com.github.mikephil.charting.utils.XLabels;
import com.github.mikephil.charting.utils.XLabels.XLabelPosition;
import com.github.mikephil.charting.utils.YLabels;

public class gaschar extends Activity {
    
    private LineChart mChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.gasinfo);

        mChart = (LineChart) findViewById(R.id.chart1);

        // 設置在Y軸上是不是從0開始顯示
        mChart.setStartAtZero(true);
        //是否在Y軸顯示數據,就是曲線上的數據
        mChart.setDrawYValues(true);
        //設置網格
        mChart.setDrawBorder(true);
        mChart.setBorderPositions(new BorderPosition[] {
            BorderPosition.BOTTOM});
         //在chart上的右下角加描述
        mChart.setDescription("曲線圖");
         //設置Y軸上的單位
         mChart.setUnit("¥"); 
        //設置透明度
        mChart.setAlpha(0.8f);
        //設置網格底下的那條線的顏色
        mChart.setBorderColor(Color.rgb(213, 216, 214));
        //設置Y軸先後倒置
        mChart.setInvertYAxisEnabled(false);
        //設置高亮顯示
        mChart.setHighlightEnabled(true);
        //設置是否能夠觸摸,如爲false,則不能拖動,縮放等
        mChart.setTouchEnabled(true);
        //設置是否能夠拖拽,縮放
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        //設置是否能擴大擴小
        mChart.setPinchZoom(true);
        // 設置背景顏色
        // mChart.setBackgroundColor(Color.GRAY);
        //設置點擊chart圖對應的數據彈出標註
        MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
        // define an offset to change the original position of the marker
        // (optional)
        mv.setOffsets(-mv.getMeasuredWidth() / 2, -mv.getMeasuredHeight());
        // set the marker to the chart
        mChart.setMarkerView(mv);
        // enable/disable highlight indicators (the lines that indicate the
        // highlighted Entry)
        mChart.setHighlightIndicatorEnabled(false);
        //設置字體格式,如正楷
        Typeface tf = Typeface.createFromAsset(getAssets(),
                "OpenSans-Regular.ttf");
        mChart.setValueTypeface(tf);

        XLabels xl = mChart.getXLabels();
//        xl.setAvoidFirstLastClipping(true);
//        xl.setAdjustXLabels(true);
        xl.setPosition(XLabelPosition.BOTTOM); // 設置X軸的數據在底部顯示
        xl.setTypeface(tf); // 設置字體
        xl.setTextSize(10f); // 設置字體大小
        xl.setSpaceBetweenLabels(3); // 設置數據之間的間距

        YLabels yl = mChart.getYLabels();
        // yl.setPosition(YLabelPosition.LEFT_INSIDE); // set the position
        yl.setTypeface(tf); // 設置字體
        yl.setTextSize(10f); // s設置字體大小
        yl.setLabelCount(5); // 設置Y軸最多顯示的數據個數
        // 加載數據
        setData();
        //從X軸進入的動畫
        mChart.animateX(4000);
        mChart.animateY(3000);   //從Y軸進入的動畫
        mChart.animateXY(3000, 3000);    //從XY軸一塊兒進入的動畫
        
        //設置最小的縮放
         mChart.setScaleMinima(0.5f, 1f);
        //設置視口
        // mChart.centerViewPort(10, 50);

        // get the legend (only possible after setting data)
        Legend l = mChart.getLegend();
        l.setForm(LegendForm.LINE);  //設置圖最下面顯示的類型
        l.setTypeface(tf);  
        l.setTextSize(15);
        l.setTextColor(Color.rgb(104, 241, 175));
        l.setFormSize(30f); // set the size of the legend forms/shapes

        // 刷新圖表
        mChart.invalidate();
    }

    private void setData() {
        String[] aa = {"1","2","3","4","5","6","7","8","9","10","11","12","月"};
        String[] bb = {"122.00","234.34","85.67","117.90","332.33","113.33"};

        ArrayList<String> xVals = new ArrayList<String>();
        for (int i = 0; i < aa.length; i++) {
            xVals.add(aa[i]);
        }

        ArrayList<Entry> yVals = new ArrayList<Entry>();

        for (int i = 0; i < bb.length; i++) {
            yVals.add(new Entry(Float.parseFloat(bb[i]), i));
        }

        // create a dataset and give it a type
        LineDataSet set1 = new LineDataSet(yVals, "DataSet Line");

        set1.setDrawCubic(true);  //設置曲線爲圓滑的線
        set1.setCubicIntensity(0.2f);
        set1.setDrawFilled(false);  //設置包括的範圍區域填充顏色
        set1.setDrawCircles(true);  //設置有圓點
        set1.setLineWidth(2f);    //設置線的寬度
        set1.setCircleSize(5f);   //設置小圓的大小
        set1.setHighLightColor(Color.rgb(244, 117, 117));
        set1.setColor(Color.rgb(104, 241, 175));    //設置曲線的顏色

        // create a data object with the datasets
        LineData data = new LineData(xVals, set1);

        // set data
        mChart.setData(data);
    }
}

其中MyMarkerView(點擊節點類)代碼:github

package com.example.view;

import android.content.Context;
import android.widget.TextView;

import com.example.iov.R;
import com.github.mikephil.charting.data.CandleEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.utils.MarkerView;
import com.github.mikephil.charting.utils.Utils;

public class MyMarkerView extends MarkerView {

    private TextView tvContent;

    public MyMarkerView(Context context, int layoutResource) {
        super(context, layoutResource);

        tvContent = (TextView) findViewById(R.id.tvContent);
    }

    // callbacks everytime the MarkerView is redrawn, can be used to update the
    // content
    @Override
    public void refreshContent(Entry e, int dataSetIndex) {

        if (e instanceof CandleEntry) {

            CandleEntry ce = (CandleEntry) e;

            tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true));
        } else {

//            tvContent.setText("" + Utils.formatNumber(e.getVal(), 0, true));
            tvContent.setText("" +e.getVal());
        }
    }
}

效果以下:app

相關文章
相關標籤/搜索