package com.cfzz.vcd;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
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.cfzz.vqcd.R;
//import com.cfzz.wy.R;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View.OnClickListener;
public class VoltageChangeDraw extends Activity {
// protected static final Activity Activity = null;
private PowerManager.WakeLock wl;
private Timer timer = new Timer();
private long mExitTime = 0;
private TimerTask task, task1;
private Handler handler;
private String title = "Signal Strength";
private XYSeries series, series1;
private XYMultipleSeriesDataset mDataset, mDataset1;
private GraphicalView chart, chart1;
private XYMultipleSeriesRenderer renderer, renderer1;
private Context context, context1;
private int addX = -1, addY;
private int addX1 = -1, addY1;
private Button button;
int[] xv = new int[720];// X轴数组元素个数
int[] yv = new int[720];// Y轴数组元素个数
int[] xv1 = new int[720];// X轴数组元素个数
int[] yv1 = new int[720];// Y轴数组元素个数
public TextView TV;
// ScreenShot screenShot = new ScreenShot();
private int BatteryN; // 目前电量
private int BatteryV; // 电池电压
// private double BatteryT; //电池温度
private String BatteryStatus; // 电池状态
private String BatteryTemp; // 电池使用情况
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.main);
this.button = (Button) this.findViewById(R.id.my_button);// 截图按键定义
// 截图按键监听
this.button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd_HH-mm-ss", Locale.US);// 日期格式名定义
String fname = "/sdcard/" + sdf.format(new Date()) + ".png";// 存储路径及文件名定义
View view = v.getRootView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
if (bitmap != null) {
System.out.println("bitmap got!");
try {
FileOutputStream out = new FileOutputStream(fname);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);// 图片格式及质量输出
System.out.println("file" + fname + "output done.");
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("bitmap is NULL!");
}
}
});
// MyTag可以随便写,可以写应用名称等
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
// 换成PowerManager.SCREEN_DIM_WAKE_LOCK会变暗)
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyTest");
wl.acquire();// 开启屏幕常亮
TV = (TextView) findViewById(R.id.TV);// 电池信息打印控件定义
// 注册一个系统 BroadcastReceiver,作为访问电池计量之用,这个不能直接在AndroidManifest.xml中注册
registerReceiver(mBatInfoReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
context = getApplicationContext();
context1 = getApplicationContext();// 图2
// 这里获得main界面上的布局,下面会把图表画在这个布局里面
LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1);
// 这个类用来放置曲线上的所有点,是一个点的集合,根据这些点画出曲线
series = new XYSeries(title);
series1 = new XYSeries(title);// 图2
// 创建一个数据集的实例,这个数据集将被用来创建图表
mDataset = new XYMultipleSeriesDataset();
mDataset1 = new XYMultipleSeriesDataset();
// 将点集添加到这个数据集中
mDataset.addSeries(series);
mDataset1.addSeries(series1);// 图2
// 以下都是曲线的样式和属性等等的设置,renderer相当于一个用来给图表做渲染的句柄
int color = Color.GREEN;
int color1 = Color.RED;
PointStyle style = PointStyle.CIRCLE;
renderer = buildRenderer(color, style, true);
renderer1 = buildRenderer(color1, style, true);// 图2
// 设置好图表的样式(横轴时间分钟值,纵轴电压毫伏值)
setChartSettings(renderer, "X", "Y", 0, 240, 3400, 4400, Color.WHITE,
Color.WHITE);
setChart1Settings(renderer1, "X", "Y", 0, 240, 0, 100, Color.WHITE,
Color.WHITE);
// 生成图表
chart = ChartFactory.getLineChartView(context, mDataset, renderer);
chart1 = ChartFactory.getLineChartView(context1, mDataset1, renderer1);// 图2
// 将图表添加到布局中去
layout.addView(chart, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
// layout.addView(chart1, new LayoutParams(LayoutParams.FILL_PARENT,
// LayoutParams.WRAP_CONTENT));
// layout.addView(chart, new LayoutParams(LayoutParams.FILL_PARENT,
// 400));//525
// layout.addView(chart1, new LayoutParams(LayoutParams.FILL_PARENT,
// 400));//图2 525
// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 刷新图表
updateChart();// 电压变化曲线刷新
updateChart1();// 电量变化曲线刷新
super.handleMessage(msg);
}
};
task = new TimerTask()// 刷新绘图计时任务配置
{
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
timer.schedule(task, 0, 60000);// 以一分钟为时间间隔运行
task1 = new TimerTask()// 保存绘图计时任务配置
{
@Override
public void run() {
if (BatteryStatus == "充满电"
|| (BatteryStatus == "放电状态" && BatteryN == 1))// 充/放电完成条件设定
{
button.callOnClick();// 保存曲线图按键触发
timer.cancel(); // 停止计时功能
}
}
};
timer.schedule(task1, 0, 10000);// 以十秒钟为时间间隔运行
}
@Override
public void onDestroy() // 结束程序声明
{
button.callOnClick();// 保存曲线图按键触发
// 当结束程序时关掉Timer
timer.cancel();
// wl.release();
// wl = null;
super.onDestroy();
}
protected XYMultipleSeriesRenderer buildRenderer(int color,
PointStyle style, boolean fill)// 配置绘图属性
{
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// 设置图表中曲线本身的样式,包括颜色、点的大小以及线的粗细等
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(color);
r.setPointStyle(style);
r.setFillPoints(fill);
r.setLineWidth((float) 1);// 线粗尺寸
renderer.addSeriesRenderer(r);
return renderer;
}
// 图2
protected XYMultipleSeriesRenderer buildRenderer1(int color1,
PointStyle style, boolean fill)// 配置绘图属性
{
XYMultipleSeriesRenderer renderer1 = new XYMultipleSeriesRenderer();// 图2
// 设置图表中曲线本身的样式,包括颜色、点的大小以及线的粗细等
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(color1);
r.setPointStyle(style);
r.setFillPoints(fill);
r.setLineWidth((float) 1);// 线粗尺寸
renderer1.addSeriesRenderer(r);
return renderer1;
}
protected void setChartSettings(XYMultipleSeriesRenderer renderer,
String xTitle, String yTit
安卓手机电池电量电压动态曲线的绘制
1星 需积分: 35 113 浏览量
2017-10-10
15:33:35
上传
评论
收藏 549KB RAR 举报
彧侠
- 粉丝: 37
- 资源: 6
最新资源
- 2022年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- Golang:通过Gin框架+Redis+责任链,实现一个简单的钉钉机器人,进行消息处理 ps:多应用版
- 2021年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- CORRUPT.navicat150-premium-cs-x64.exe
- centos7 ssh 升级至 9.6p1
- DriverMax Pro .exe
- PHP端通过modbus协议跟第三方设备进行数据通信
- navicat安装包亲测可用
- 算法部署-使用OpenVINO部署MobileStyleGAN轻量化高保真图像合成算法-项目源码-优质项目实战.zip
- 基于java实现远程采集华为逆变器使用modbus tcp协议进行通讯的设备数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈