80,492
社区成员
发帖
与我相关
我的任务
分享barChart.setDrawBorders(false); // //是否在折线图上添加边框
barChart.setDescription("各课程签到率");// 数据描述
barChart.setData(barData); // 设置数据
// 如果没有数据的时候,会显示这个,类似ListView的EmptyView
barChart.setNoDataTextDescription("You need to provide data for the chart.");
barChart.setDrawGridBackground(false); // 是否显示表格颜色
barChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的颜色,在这里是是给颜色设置一个透明度
barChart.setTouchEnabled(true); // 设置是否可以触摸
barChart.setDragEnabled(true);// 是否可以拖拽
barChart.setScaleEnabled(true);// 是否可以缩放
barChart.setScaleYEnabled(true);// 是否可以Y方向的缩放
barChart.setScaleXEnabled(true);// 是否可以X方向的缩放
barChart.setPinchZoom(true);// true,则x和y轴可以用2个手指同时缩放,如果为false,则可以分别缩放x和y轴。
// barChart.setBackgroundColor();// 设置背景
barChart.setDrawBarShadow(false);// 设置是否启动阴影
Legend mLegend = barChart.getLegend(); // 设置比例图标示
mLegend.setForm(LegendForm.CIRCLE);// 样式
mLegend.setFormSize(6f);// 字体
mLegend.setTextColor(Color.BLACK);// 颜色
barChart.getAxisRight().setEnabled(false);// 隐藏右边的坐标轴
// barChart.getAxisLeft().setAxisMinValue(0f);
// barChart.getAxisLeft().setAxisMaxValue(100f);
Matrix m = new Matrix();
m.postScale(1.1f, 1f);// 两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
barChart.getViewPortHandler().refresh(m, barChart, false);// 将图表动画显示之前进行缩放
// X轴设定
// XAxis xAxis = barChart.getXAxis();
// xAxis.setPosition(XAxisPosition.TOP);
barChart.animateXY(0, 1000); // 立即执行的动画,y轴方向
barChart.getAxisLeft().setAxisMinValue(0f);
barChart.getAxisLeft().setAxisMaxValue(100f);



package com.shen.teacher;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.example.biyeshiji1.R;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.Legend.LegendForm;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class StatisticsStudentFragment extends Fragment {
private BarChart bc_student_barChart;
private BarData mBarData;
private Dialog mDialog;
/** 上一个Fragment点击的学生ID */
private String stuID;
/** 上一个Fragment点击的学什么姓名 */
private String stuName;
/** 课程数目 */
private int count;
/** 课程名列表 */
private ArrayList<String> mCourseList = new ArrayList<String>();
/** 签到率列表 */
private ArrayList<String> mRateList = new ArrayList<String>();
public StatisticsStudentFragment(String stuID, String stuName) {
this.stuID = stuID;
this.stuName = stuName;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
view = inflater.inflate(R.layout.fragment_statistics_student_chart,
container, false);
bc_student_barChart = (BarChart) view
.findViewById(R.id.bc_student_barChart);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new AsyncTask<Void, Void, Void>() {
Socket socket = null;
private String IpAddress = getActivity().getResources().getString(
R.string.ipAddress);
private int Port = Integer.parseInt(getActivity().getResources()
.getString(R.string.Port));
@Override
protected void onPreExecute() {
mDialog = new AlertDialog.Builder(getActivity()).create();
mDialog.show();
// 注意此处要放在show之后 否则会报异常
mDialog.setContentView(R.layout.loading_process_dialog_anim);
}
@Override
protected Void doInBackground(Void... params) {
try {
// 1.创建socket对象,指定服务器端地址和端口号
socket = new Socket(IpAddress, Port);
// 2.创建map,待序列化
Map<String, String> map = new HashMap<String, String>();
// 3. 放入请求码102,请求课程签到列表
map.put("index", "102");
// 4.得到序列化工具
ObjectMapper mapper = new ObjectMapper();
// 5.序列化map为byte[]数组,待发送
byte[] data1 = mapper.writeValueAsBytes(map);
// 6.得到socket连接的输出流
DataOutputStream outputStream = new DataOutputStream(
socket.getOutputStream());
// 7.写入输出流(缓存)
outputStream.write(data1);
// 8.发送数据(此句执行完,数据将到达服务器)
outputStream.flush();
// 9.得到Socket的输入流
DataInputStream inputStream = new DataInputStream(
socket.getInputStream());
// 可做优化:数据内加上长度,方便定义数组长度
// 10.定义一个接收数据用的byte[]数组
byte[] data2 = new byte[4096];
// 11.阻塞办法读到服务器发来的data2
int len = inputStream.read(data2);
// 12.data2不为空,说明读到了数据
if (len != 0) {
// 13.定义一个map2,用来获取data2
@SuppressWarnings("unchecked")
Map<String, Object> map2 = mapper.readValue(data2,
Map.class);
// 14.判断结果码是否为102
if (map2.get("index").toString().equals("102")) {
// 15.定义一个List<Map<课程名,签到率>>,并赋值,与服务器相同
@SuppressWarnings("unchecked")
List<HashMap<String, String>> courseList = (List<HashMap<String, String>>) map2
.get("coureselist");
// 16.List的长度就是课程数目,List的每一项都是一个Map<课程名,签到率>
count = courseList.size();
// 17.循环遍历,赋值
for (int i = 0; i < count; i++) {
// 18.课程名赋值
mCourseList
.add(courseList.get(i).get("course"));
// 19.签到率赋值
mRateList.add(courseList.get(i).get("rate"));
}
// 20.结束
len = 0;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (socket != null) {
socket.close();
socket = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (mCourseList != null && mRateList != null) {
mBarData = getBarData(count);
showBarChart(bc_student_barChart, mBarData);
}
if (mDialog != null) {
mDialog.dismiss();
}
}
}.execute();
}
/**
* @param barChart
* BarChart对象
* @param barData
* 柱状图数据
* */
/**
* @param barChart
* @param barData
*/
private void showBarChart(BarChart barChart, BarData barData) {
barChart.setDrawBorders(false); // //是否在折线图上添加边框
barChart.setDescription("各课程签到率");// 数据描述
barChart.setData(barData); // 设置数据
// 如果没有数据的时候,会显示这个,类似ListView的EmptyView
barChart.setNoDataTextDescription("You need to provide data for the chart.");
barChart.setDrawGridBackground(false); // 是否显示表格颜色
barChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的颜色,在这里是是给颜色设置一个透明度
barChart.setTouchEnabled(true); // 设置是否可以触摸
barChart.setDragEnabled(true);// 是否可以拖拽
barChart.setScaleEnabled(true);// 是否可以缩放
barChart.setScaleYEnabled(true);// 是否可以Y方向的缩放
barChart.setScaleXEnabled(true);// 是否可以X方向的缩放
barChart.setPinchZoom(true);// true,则x和y轴可以用2个手指同时缩放,如果为false,则可以分别缩放x和y轴。
// barChart.setBackgroundColor();// 设置背景
barChart.setDrawBarShadow(false);// 设置是否启动阴影
Legend mLegend = barChart.getLegend(); // 设置比例图标示
mLegend.setForm(LegendForm.CIRCLE);// 样式
mLegend.setFormSize(6f);// 字体
mLegend.setTextColor(Color.BLACK);// 颜色
barChart.getAxisRight().setEnabled(false);// 隐藏右边的坐标轴
// barChart.getAxisLeft().setAxisMinValue(0f);
// barChart.getAxisLeft().setAxisMaxValue(100f);
Matrix m = new Matrix();
m.postScale(1.1f, 1f);// 两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.1倍
barChart.getViewPortHandler().refresh(m, barChart, false);// 将图表动画显示之前进行缩放
// X轴设定
// XAxis xAxis = barChart.getXAxis();
// xAxis.setPosition(XAxisPosition.TOP);
barChart.animateXY(0, 1000); // 立即执行的动画,y轴方向
}
/**
* @param count
* 数据个数
*
* */
private BarData getBarData(int count) {
List<String> xValues = mCourseList;
List<BarEntry> yValues = new ArrayList<BarEntry>();
for (int i = 0; i < count; i++) {
float value = Float.parseFloat(mRateList.get(i));
yValues.add(new BarEntry(value, i));
}
// y轴的数据集合
BarDataSet barDataSet = new BarDataSet(yValues, stuName);
barDataSet.setColor(Color.rgb(114, 188, 223));
List<IBarDataSet> barDataSets = new ArrayList<IBarDataSet>();
barDataSets.add(barDataSet); // add the datasets
BarData barData = new BarData(xValues, barDataSets);
return barData;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/bc_student_barChart"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>