```java
*@fileName:Main_IndexActivity.java
*@Description:
*@creat data:2015年9月16日
*@author:Cookies
*/package
com.sciyon.syncmobile;import
java.math.BigDecimal;import
java.text.DecimalFormat;import
java.util.ArrayList;import
org.achartengine.ChartFactory;import
org.achartengine.GraphicalView;import
org.achartengine.chart.PointStyle;import
org.achartengine.model.XYMultipleSeriesDataset;import
org.achartengine.model.XYSeries;import
org.achartengine.renderer.XYMultipleSeriesRenderer;import
org.achartengine.renderer.XYSeriesRenderer;import
com.sciyon.syncmobile.adapter.MainIndex_SightListViewAdapter;import
com.sciyon.syncmobile.adapter.MainIndex_TopSummer_GridViewAdapter;import
com.sciyon.syncmobile.common.BaseConfigData;import
com.sciyon.syncmobile.controls.XYRenderer;import
com.sciyon.syncmobile.dal.YonyouRealTimeProcessorImpl;import
com.sciyon.syncmobile.entity.GirdViewMainIndexTopSumItem;import
com.sciyon.syncmobile.entity.SightSet;import
android.annotation.SuppressLint;import
android.content.Context;import
android.graphics.Color;import
android.os.Bundle;import
android.os.Handler;import
android.os.Looper;import
android.os.Message;import
android.support.v4.app.Fragment;import
android.util.DisplayMetrics;import
android.util.Log;import
android.view.Gravity;import
android.view.LayoutInflater;import
android.view.View;import
android.view.ViewGroup;import
android.view.WindowManager;import
android.view.ViewGroup.LayoutParams;import
android.widget.BaseAdapter;import
android.widget.GridView;import
android.widget.LinearLayout;import
android.widget.ListView;import
android.widget.RelativeLayout;import
android.widget.TextView;import
android.widget.Toast;/**
* @author Administrator
* */public
class Main_IndexFragment extends BaseFragment {
protected static final String Tag = "AddX_Y";
private XYSeries xyseries;// 数据
private XYMultipleSeriesDataset dataset;
private GraphicalView chartview;
private XYMultipleSeriesRenderer renderer;
private XYSeriesRenderer datarenderer;
private Context context;
DecimalFormat df = new DecimalFormat("0.00");
DecimalFormat df_1 = new DecimalFormat("0.0");
int i = 0;
Thread t;
private int addX;
private double addY;
int X_MAX = 100;// x轴最大值
// 标准和阈值
double value = 68;// 平行线中间值
double bound = 0.5;// 上下限 柑橘需要设定
// 实时数据获取的服务器参数设置
final YonyouRealTimeProcessorImpl syncbaseApi = new YonyouRealTimeProcessorImpl(
BaseConfigData.SYNCBASE_DB_NAME, BaseConfigData.SYNCBASE_DB_PORT);
private ListView listView;
private GridView gridView;
private SightSet sightSet;
private ArrayList<SightSet> realListSet = new ArrayList<SightSet>();
private MainIndex_SightListViewAdapter sightSetAdapter;
private ArrayList<GirdViewMainIndexTopSumItem> mainIndexTopSumItems; // 该板式下头部的汇总信息存放List
private String testData1; //
private String testData2; //
private double loaeRate;
private static int headViewHeight;// listview表头的高度
DataHolder holdeData; // 存放实时传递的数据
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO 自动生成的方法存根
View mView = inflater.inflate(R.layout.main_index, null);
LinearLayout chart_layout1 = (LinearLayout) mView
.findViewById(R.id.chart_real_layout1);
holdeData = new DataHolder();
// No.1 设定大渲染器的属性 太多了 所以写了个类
renderer = new XYRenderer("109测点实时数据动态显示图", "X轴(单位:秒)", "Y轴(单位)", 0,
X_MAX, -1, 1, Color.GRAY, Color.LTGRAY, 16, 16, 10, 15, 10, 5,
true);
renderer.setApplyBackgroundColor(true);
renderer.setMarginsColor(Color.argb(255, 42, 101, 169)); // 图表以外的背景色
dataset = new XYMultipleSeriesDataset();
datarenderer = new XYSeriesRenderer();
datarenderer.setDisplayChartValues(true);
xyseries = new XYSeries("109测点");
// 2
// xyseries.add(0, 0);//先输入一个数据让它绘出renderer
// 3
dataset.addSeries(0, xyseries);
datarenderer.setColor(Color.GREEN);
datarenderer.setLineWidth(2);
datarenderer.setPointStyle(PointStyle.POINT);
// 4
renderer.addSeriesRenderer(datarenderer);
// 5
context = getActivity();
chartview = ChartFactory.getLineChartView(context, dataset, renderer);
chart_layout1.addView(chartview, new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
renderer.setYAxisMin(value - (2 * bound));// Y最小值
renderer.setYAxisMax(value + (2 * bound));// Y最大值
// 设置chart的视图范围 参数//1x->start 2max 3y->start 4max
renderer.setRange(new double[] { 0d, (double) X_MAX,
value - (2 * bound), value + (2 * bound) });
// chartview.repaint();
// ///***************图表以外布局*****************////////////
listView = (ListView) mView.findViewById(R.id.list);
gridView = (GridView) mView.findViewById(R.id.sum_real_grids);
// ListView头部的数据设定
sightSet = new SightSet();
sightSet.setBelongNode("机组 ");
sightSet.setCapicity("容量");
sightSet.setLoadRate("负荷率");
sightSet.setStatusPointTitle("状态");
sightSet.setWorkUsefull("有功");
sightSet.setWorkUseless("无功");
listView.addHeaderView(setListHeadr(sightSet)); // 添加头部View到ListView中
// 不参与刷新
// setView();
// setData();
sightSetAdapter = new MainIndex_SightListViewAdapter(getActivity());
// setTopSumGridView();
setTopSumData(0);
t = new Thread(r1);
t.start();
return mView;
}// oncreate end
// handler处理UI更新
Handler myhandler = new Handler() {
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.i(Tag, "message what is:" + msg.what);
switch (msg.what) {
case 1:
// realListSet = (ArrayList<SightSet>) msg.obj;
// Bundle bundle = msg.getData();
// testData1 = bundle.getDouble("part_time");
// testData2 = bundle.getDouble("part_data");
// DataHolder holder=(DataHolder) msg.obj;
testData1 = df.format(holdeData.data1);
testData2 = df.format(holdeData.data2);
realListSet.clear();
for (int i = 0; i < 4; i++) {
sightSet = new SightSet();
sightSet.setBelongNode("#" + i);
sightSet.setCapicity("660");
sightSet.setStatusPoint(R.drawable.gridview_current);
if (i == 2) {
sightSet.setStatusPoint(R.drawable.gridview_currentno);
}
sightSet.setWorkUsefull(testData2);
sightSet.setWorkUseless(testData1);
sightSet.setLoadRate(df_1
.format(100 * (holdeData.data1 < holdeData.data2 ? holdeData.data1
/ holdeData.data2
: holdeData.data2 / holdeData.data1)));
realListSet.add(sightSet);
}
Log.e(Tag, "realListSet.before_notify:" + realListSet.size());
// realListSet=(ArrayList<SightSet>) msg.obj;
sightSetAdapter.setAdapterData(realListSet);
sightSetAdapter.notifyDataSetChanged();
Log.e(Tag, "realListSet.size:" + realListSet.size()
+ "sightSetAdapter count:" + sightSetAdapter.getCount());
Log.i(Tag, "listview setadapter go testData1:" + testData1
+ "testData2:" + testData1);
listView.setAdapter(sightSetAdapter);
// setListViewHeightBasedOnChildren(listView, sightSetAdapter);
// setTopSumData(bundle.getDouble("loadrate")); // gridview
// 的数据设置
// setTopSumData(holder.data3);
setTopSumData(holdeData.data3);
chartview.repaint();
break;
case 2:
Toast.makeText(getActivity(),
getString(R.string.mainindex_network_error), 1).show();
break;
default:
break;
}
}
};
Runnable r1 = new Runnable() {
BigDecimal b;
BigDecimal b2;
Double value1;
double value2;
Bundle bundle;
public void run() {
try {
addY = 0.00;
while (true) {
// Looper.prepare();
i++;
Thread.sleep(5000);
addX = i;
Message message = Message.obtain();
try {
value1 = syncbaseApi.getRealData(109);
value2 = syncbaseApi.getRealData(111);
b = new BigDecimal(value1);
addY = b.setScale(3, BigDecimal.ROUND_HALF_UP)
.doubleValue();
b2 = new BigDecimal(value2);
loaeRate = b2.setScale(2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
// bundle = new Bundle();
// bundle.putDouble("part_time", addX);
// bundle.putDouble("part_data", addY);
// bundle.putDouble("loadrate", loaeRate);
// message.setData(bundle);// bundle传值,耗时,效率低
holdeData.data1 = addX;
holdeData.data2 = addY;
holdeData.data3 = loaeRate;
message.obj = holdeData;
message.what = 1;// 标志是哪个线程传数据
Log.i(Tag,
"message.what is setted" + message.what);
} catch (Exception e) {
Log.e(Tag, "Exception happened e:" + e.toString()
+ "message.what:" + message.what + "addY:"
+ addY);
addY = 0.0;
message.what = 2;
myhandler.sendMessage(message);// 发送message信息
e.printStackTrace();
}
// 步骤不能变 1先清除数据 2添加源数据 3添加数据
dataset.removeSeries(xyseries);
xyseries.add(addX, addY);
dataset.addSeries(0, xyseries);
// 清空上一刻绑定的数据
realListSet.clear();
// 添加列表数据
Log.i(Tag, "addx:" + addX + ";addY:" + addY);
chartview.repaint();
// listView.postInvalidate();
// chartview.postInvalidate();
if (i > (X_MAX - 100) + 80)// 延长X_MAX造成右移效果
{
renderer.setXAxisMin(X_MAX - 50); // 设置X最小值
X_MAX = X_MAX + 50;
renderer.setXAxisMax(X_MAX);// 设置X最大值
Log.i("Tag", String.valueOf(i));
}
myhandler.sendMessage(message);// 发送message信息
// Looper.loop();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
@Override
public void onDestroy() {
t.interrupt();
System.out.println("destory");
super.onDestroy();
}
// ListView的头部View的属性设置
private View setListHeadr(SightSet headSet) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View headView = layoutInflater.inflate(R.layout.main_index_list_item,
null);
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
// 单位是像素 屏幕宽度减去效果图中展示的两边边距20px
int width = wm.getDefaultDisplay().getWidth() - 40;
TextView name = (TextView) headView.findViewById(R.id.name);
TextView capacity = (TextView) headView.findViewById(R.id.capacity);
TextView status = (TextView) headView.findViewById(R.id.status);
TextView workusefull = (TextView) headView
.findViewById(R.id.workusefull);
TextView workuseless = (TextView) headView
.findViewById(R.id.workuseless);
TextView loadrate = (TextView) headView.findViewById(R.id.load_rate);
name.setGravity(Gravity.CENTER);
capacity.setGravity(Gravity.CENTER);
status.setGravity(Gravity.CENTER);
workusefull.setGravity(Gravity.CENTER);
workuseless.setGravity(Gravity.CENTER);
loadrate.setGravity(Gravity.CENTER);
name.setWidth((int) (width / 6));// width是屏幕宽度,在此实现宽度的百分比
capacity.setWidth((int) (width / 6));
status.setWidth((int) (width / 6));
workusefull.setWidth((int) (width / 6));
workuseless.setWidth((int) (width / 6));
loadrate.setWidth((int) (width / 6));
name.setText(headSet.getBelongNode());
capacity.setText(String.valueOf(headSet.getCapicity()));
status.setText(headSet.getStatusPointTitle());
workusefull.setText(String.valueOf(headSet.getWorkUsefull()));
workuseless.setText(String.valueOf(headSet.getWorkUseless()));
loadrate.setText(String.valueOf(headSet.getLoadRate()));
// 设置字体颜色
name.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
capacity.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
status.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
workusefull.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
workuseless.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
loadrate.setTextColor(getResources().getColor(
R.color.mainindex_list_head_text));
headView.setBackgroundColor(getResources().getColor(
R.color.mainindex_list_head_bgcolor));
return headView;
}
@SuppressLint("ResourceAsColor")
private void setTopSumData(double loadrate) {
String strloadrate = String.valueOf(loadrate);
mainIndexTopSumItems = new ArrayList<GirdViewMainIndexTopSumItem>();
GirdViewMainIndexTopSumItem item = new GirdViewMainIndexTopSumItem();
// 装机容量
item.setmItemName("装机容量");
item.setmItemBackImg(R.drawable.circle_orange);
item.setmItemData(strloadrate);
item.setmItemTextColor(R.color.mainindex_top_name_orange);
item.setmItemDataColor(getResources().getColor(
R.color.mainindex_top_data_orange));
mainIndexTopSumItems.add(item);
// 运行容量
item = new GirdViewMainIndexTopSumItem();
item.setmItemName("运行容量");
item.setmItemBackImg(R.drawable.circle_green);
item.setmItemData(strloadrate);
item.setmItemTextColor(R.color.mainindex_top_name_green);
item.setmItemDataColor(R.color.mainindex_top_data_green);
mainIndexTopSumItems.add(item);
// 总负荷
item = new GirdViewMainIndexTopSumItem();
item.setmItemName("总负荷");
item.setmItemBackImg(R.drawable.circle_blue);
item.setmItemData(strloadrate);
item.setmItemTextColor(R.color.mainindex_top_name_blue);
item.setmItemDataColor(R.color.mainindex_top_data_blue);
mainIndexTopSumItems.add(item);
// 负荷率
item = new GirdViewMainIndexTopSumItem();
item.setmItemName("负荷率");
item.setmItemBackImg(R.drawable.circle_red);
item.setmItemData(strloadrate);
item.setmItemTextColor(R.color.mainindex_top_name_red);
item.setmItemDataColor(R.color.mainindex_top_data_red);
mainIndexTopSumItems.add(item);
int size = mainIndexTopSumItems.size();
// Log.i("personcentemenu", size+"");
int length = 75;
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density;
int gridviewWidth = (int) (size * length * density);
int itemWidth = (int) (length * density);
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
itemWidth = width / (size) - 20;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
width, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
params.setMargins((width - 4 * itemWidth) / 2, 0, 0, 0);
gridView.setLayoutParams(params); // 重点
gridView.setColumnWidth(itemWidth); // 重点
gridView.setHorizontalSpacing(1); // 间距
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(size); // 重点
MainIndex_TopSummer_GridViewAdapter adapter = new MainIndex_TopSummer_GridViewAdapter(
getActivity(), mainIndexTopSumItems);
gridView.setAdapter(adapter);
}
// 测量ListView的高度。
public static void setListViewHeightBasedOnChildren(ListView listView,
BaseAdapter myAdapter) {
// 获取ListView对应的Adapter
if (myAdapter == null) {
return;
}
int totalHeight = 0;
// listAdapter.getCount()返回数据项的数目
// 注:表头的Adapter是没有获取到,所以要另外+1个高度
for (int i = 0, len = myAdapter.getCount(); i < len; i++) {
View listItem = myAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight * 4 / 3
+ (listView.getDividerHeight() * (myAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
static class DataHolder {
double data1;
double data2;
double data3;
}}```