簡介
MPAndroidChart是一款基于Android的開源圖表庫,MPAndroidChart不僅可以在Android設備上繪制各種統計圖表,而且可以對圖表進行拖動和縮放操作,應用起來非常靈活,
基本使用
- 創建視圖
兩種方式.xml中定義它
<com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="match_parent" />- java代碼動態創建,并將宣告的物件放到視圖中
LineChart chart = new LineChart(Context); - 添加資料
想要給圖表設定資料,必須通過setData()方法public void setData (ChartData data ){ ... }ChartData類里面封裝了呈現期間所需圖表的所有資料和資訊,使用每一種圖表需要使用其對應的子類例如:LineChart對應LineData
這時你會看到建構式有以下方法,同時LineData也有addDataSet()方法
一個DataSet物件表示當前Chart的一種型別資料,它可以將Chart中加入不同的型別,其允許特定樣式,public LineData(List<LineDataSet> sets) { ... } public LineData(LineDataSet...) { ... }例如:一個折線圖,可能不光有當天的溫度和濕度變化,還有前幾天的變化
LineDataSet建構式如下
List型別的Entry封裝了圖表的所有值,要向圖表添加資料,需要將每個資料物件包裝到public LineDataSet (List <Entry> entries,String label ){ ... }Entry物件,Entry類表示單個資料注意:mpAndroidChart不同版本有一定差異,方法引數會有一定的差異,總體思路基本一致,注意看方法的引數,和例外資訊!!!
更新視圖
使用invalidate()方法重繪資料
如果是動態添加資料需要notify
lineDataSet.notifyDataSetChanged();
lineData.notifyDataChanged();
lineChart.notifyDataSetChanged();
lineChart.invalidate();
手勢互動
setTouchEnabled(boolean enabled):允許啟用/禁用與圖表的所有可能的觸摸互動setDragEnabled(boolean enabled):啟用/禁用圖表的拖動(平移)setScaleEnabled(boolean enabled):啟用/禁用兩個軸上的圖表縮放setScaleXEnabled(boolean enabled):啟用/禁用x軸縮放setScaleYEnabled(boolean enabled):啟用/禁用y軸縮放setPinchZoom(boolean enabled):如果設定為true,則啟用縮放縮放,如果禁用,則可以單獨縮放x軸和y軸setDoubleTapToZoomEnabled(boolean enabled):將此設定為false以禁止通過雙擊來縮放圖表
顏色設定
-
通過
DataSet物件的setColor()或setColors()設定顏色,也可選擇已經提供好的顏色集顏色集合在ColorTemplate類中barDataSet.setColors(ColorTemplate.JOYFUL_COLORS);
代碼運用
public class DataAnalyseActivity extends AppCompatActivity {
//1 定義物件
LineChart income_chart,outpay_chart;
MyDBHelper mhelper;
SQLiteDatabase db;
String[] indata={"學習-獎金","補助-獎金","比賽-獎勵","業余-兼職","基本工資","福利-分紅","加班-津貼","其他"};
//收入型別資料統計的初始值
int xxjjmoney=0;
int bzjjmoney=0;
int bsjlmoney=0;
int yyjzmoney=0;
int jbgzmoney=0;
int flfhmoney=0;
int jbjtmoney=0;
int qtmoney=0;
String[] outdata={"電影-娛樂","美食-暢飲","歡樂-購物","手機-充值","交通-出行","教育-培訓","社交-禮儀","生活-日用","其他"};
//收入型別資料統計的初始值
int dyylmoney=0;
int mscymoney=0;
int hlgwmoney=0;
int sjczmoney=0;
int jtcxmoney=0;
int jypxmoney=0;
int sjlymoney=0;
int shrymoney=0;
int othermoney=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_analyse);
//2 系結控制元件
initView();
//3 收入匯總分析
inComeData();
//4 支出匯總分析
outComeData();
}
//2 系結控制元件---------------代碼
private void initView() {
income_chart=findViewById(R.id.income_chart_data);
outpay_chart=findViewById(R.id.outpay_chart_data);
mhelper=new MyDBHelper(DataAnalyseActivity.this);
db=mhelper.getWritableDatabase();
}
//3 收入匯總分析-------------------代碼
private void inComeData() {
//第一部分:獲取資料
Cursor cursor =db.rawQuery("select * from in_come",null);
while(cursor.moveToNext()){
Double mymoney=cursor.getDouble(cursor.getColumnIndex("inmoney"));
String mytype=cursor.getString(cursor.getColumnIndex("intype"));
if(mytype.equals("學習-獎金")){
xxjjmoney+=mymoney;
}else if(mytype.equals("補助-獎金")){
bzjjmoney+=mymoney;
}else if(mytype.equals("比賽-獎勵")){
bzjjmoney+=mymoney;
}else if(mytype.equals("業余-兼職")){
yyjzmoney+=mymoney;
}else if(mytype.equals("基本-工資")){
jbgzmoney+=mymoney;
}else if(mytype.equals("福利-分紅")){
flfhmoney+=mymoney;
}else if(mytype.equals("加班-津貼")){
jbjtmoney+=mymoney;
}else if(mytype.equals("其他")){
qtmoney+=mymoney;
}
}
//第二部分:LineChart 圖表初始化設定---Xy 軸的設定
XAxis xAxis=income_chart.getXAxis();//獲取此圖表的 x 軸軸線
YAxis yAxisleft =income_chart.getAxisLeft();//獲取此圖表的 Y 軸左側軸線
YAxis yAxisright =income_chart.getAxisRight();//獲取此圖表的 Y軸右側軸線
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//設定 X 軸線的位置為底部
yAxisleft.setAxisMinimum(0f);//保證 Y 軸從 0 開始,不然會上移一點,
yAxisright.setAxisMinimum(0f);
xAxis.setValueFormatter(new IAxisValueFormatter() {//x 軸自定義標簽的設定
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return indata[(int) v];
}
});
//第三部分:LineDataSet 曲線初始化設定
List<Entry> inentries=new ArrayList<>();//Y 軸的資料
inentries.add(new Entry(0,xxjjmoney));
inentries.add(new Entry(1,bzjjmoney));
inentries.add(new Entry(2,bsjlmoney));
inentries.add(new Entry(3,yyjzmoney));
inentries.add(new Entry(4,jbgzmoney));
inentries.add(new Entry(5,flfhmoney));
inentries.add(new Entry(6,jbjtmoney));
inentries.add(new Entry(7,qtmoney));
LineDataSet lineDataSet=new LineDataSet(inentries,"金額");//代表一條線,“金額”是曲線名稱
lineDataSet.setValueTextSize(25);//曲線上文字的大小
lineDataSet.setValueTextColor(Color.WHITE);//曲線上文字的顏色
lineDataSet.setDrawFilled(true);//設定折線圖填充
//第四部分:曲線展示
LineData data=new LineData(lineDataSet);//創建 LineData 物件 屬于LineChart 折線圖的資料集合
income_chart.setData(data);// 添加到圖表中
}
//4 支出匯總分析--------------------代碼
private void outComeData() {
//第一部分:獲取資料
Cursor cursor =db.rawQuery("select * from pay_out",null);
while(cursor.moveToNext()){
Double mymoney=cursor.getDouble(cursor.getColumnIndex("outmoney"));
String mytype=cursor.getString(cursor.getColumnIndex("outtype"));
if(mytype.equals("電影-娛樂")){
dyylmoney+=mymoney;
}else if(mytype.equals("美食-暢飲")){
mscymoney+=mymoney;
}else if(mytype.equals("歡樂-購物")){
hlgwmoney+=mymoney;
}else if(mytype.equals("手機-充值")){
sjczmoney+=mymoney;
}else if(mytype.equals("交通-出行")){
jtcxmoney+=mymoney;
}else if(mytype.equals("教育-培訓")){
jypxmoney+=mymoney;
}else if(mytype.equals("社交-禮儀")){
sjlymoney+=mymoney;
}else if(mytype.equals("生活-日用")){
shrymoney+=mymoney;
}else if(mytype.equals("其他")){
othermoney+=mymoney;
}
}
//第二部分:LineChart 圖表初始化設定---Xy 軸的設定
XAxis xAxis=outpay_chart.getXAxis();//獲取此圖表的 x 軸軸線
YAxis yAxisleft =outpay_chart.getAxisLeft();//獲取此圖表的 Y 軸左側軸線
YAxis yAxisright =outpay_chart.getAxisRight();//獲取此圖表的 Y 軸右側軸線
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//設定 X 軸線的位置為底部
yAxisleft.setAxisMinimum(0f);//保證 Y 軸從 0 開始,不然會上移一點,
yAxisright.setAxisMinimum(0f);
xAxis.setValueFormatter(new IAxisValueFormatter() {//x 軸自定義標簽的設定
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return outdata[(int) v];
}
});
//第三部分:LineDataSet 曲線初始化設定
List<Entry> outentries=new ArrayList<>();//Y 軸的資料
outentries.add(new Entry(0,dyylmoney));
outentries.add(new Entry(1,mscymoney));
outentries.add(new Entry(2,hlgwmoney));
outentries.add(new Entry(3,sjczmoney));
outentries.add(new Entry(4,jtcxmoney));
outentries.add(new Entry(5,jypxmoney));
outentries.add(new Entry(6,sjlymoney));
outentries.add(new Entry(7,shrymoney));
outentries.add(new Entry(8,othermoney));
LineDataSet lineDataSet=new LineDataSet(outentries,"金額");//代表一條線,“金額”是曲線名稱
lineDataSet.setValueTextSize(25);//曲線上文字的大小
lineDataSet.setValueTextColor(Color.WHITE);//曲線上文字的顏色
lineDataSet.setDrawFilled(true);//設定折線圖填充
//第四部分:曲線展示
LineData data=new LineData(lineDataSet);//創建 LineData 物件 屬于LineChart 折線圖的資料集合
outpay_chart.setData(data);// 添加到圖表中
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/305237.html
標籤:其他
