首页实时获取数据更新ListView和chart代码


```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; }}```

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值