android 轻量级曲线图的绘制
2015-10-26 11:43
597 查看
在做项目的时候,我们会遇到将数据以曲线图的形式展现给用户,对于曲线图的要求不同,所有的技术点也差异甚大。如果曲线图具备缩小放大功能,并可拖动xy轴查看以及点击相应节点能取到改点的(x,y)坐标值的功能,像这种较为复杂的曲线图,我建议用achartengine(这种方式我在前面的文章有写过:http://blog.csdn.net/huashanjuji/article/details/46276997),这种方式的缺点是,当节点数达到1万5或2万以上时,往往加载比较耗时。
而在本文中,我所使用的是比较轻量级的方式绘制曲线图,这种方式实现的图,功能相对比较简单,而加载速度则比上一种方式快很多。
效果图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/07/c881a4830a50cd3b2da926af096ac829)
具体实现如下:
相应的支持文件可在此链接下去下载:http://download.csdn.net/detail/huashanjuji/9213139
布局文件:
<?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" >
<hk.newsoft.line.chart.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_margin="20dp"
/>
</LinearLayout>
曲线图的绘制:
而在本文中,我所使用的是比较轻量级的方式绘制曲线图,这种方式实现的图,功能相对比较简单,而加载速度则比上一种方式快很多。
效果图如下:
具体实现如下:
相应的支持文件可在此链接下去下载:http://download.csdn.net/detail/huashanjuji/9213139
布局文件:
<?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" >
<hk.newsoft.line.chart.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_margin="20dp"
/>
</LinearLayout>
曲线图的绘制:
mLineChart = (LineChart) findViewById(R.id.chart); List<LineEntity> lines = new ArrayList<LineEntity>(); List<Float> dates = new ArrayList<Float>(); for (int i = 0; i < 100; i++) { dates.add((float) (i + 0.1)); } LineEntity MA1 = new LineEntity(); MA1.setTitle("MA1"); MA1.setLineColor(Color.RED);// 设置曲线的颜色 MA1.setLineData(dates);// 添加数据 lines.add(MA1); // 纵坐标 List<String> ytitle = new ArrayList<String>(); ytitle.add("-200"); ytitle.add("-100"); ytitle.add("0"); ytitle.add("100"); ytitle.add("200"); // 横坐标 List<String> xtitle = new ArrayList<String>(); xtitle.add("0"); xtitle.add("40"); xtitle.add("80"); xtitle.add("120"); xtitle.add("160"); // 曲线参数设置 mLineChart.setAxisXColor(Color.LTGRAY); // x轴颜色 mLineChart.setAxisYColor(Color.LTGRAY); // y轴颜色 mLineChart.setBorderColor(Color.BLUE); // 整个曲线图边框颜色 mLineChart.setAxisMarginTop(20); // 上边界 mLineChart.setAxisMarginLeft(20); // 左边界 mLineChart.setAxisMarginBottom(20);// 下边界 mLineChart.setAxisYTitles(ytitle); // y轴标注 mLineChart.setAxisXTitles(xtitle); // x轴标注 mLineChart.setLongitudeFontSize(20);// x轴标注字体大小 mLineChart.setLongitudeFontColor(Color.BLACK);// x轴标注颜色 mLineChart.setLatitudeColor(Color.GRAY);// y轴颜色 mLineChart.setLatitudeFontColor(Color.BLACK);// y轴标注颜色 mLineChart.setLongitudeColor(Color.GRAY); // x轴颜色 mLineChart.setBackgroundColor(Color.WHITE); // 曲线图背景色 mLineChart.setMaxValue(200); // 坐标上限 mLineChart.setMinValue(-200); // 坐标下限 mLineChart.setMaxPointNum(160); // x轴最大点数 mLineChart.setDisplayAxisXTitle(true); mLineChart.setDisplayAxisYTitle(true); mLineChart.setDisplayLatitude(true); mLineChart.setDisplayLongitude(true); mLineChart.setLineData(lines); mLineChart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub float clickPostX = 0; float clickPostY = 0; // 最大值为1,可以根据点击的比例计算相应坐标点对应的坐标值 clickPostX = Float.parseFloat(mLineChart .getAxisXGraduate(mLineChart.getClickPostX())); clickPostY = Float.parseFloat(mLineChart .getAxisYGraduate(mLineChart.getClickPostY())); Toast.makeText(getApplicationContext(), clickPostX + " <--> " + clickPostY, 0).show(); } });
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories