android MPChart图标使用具体解释

近期项目里有要加入更加复杂的图标了,曾经一些简单的曲线图,饼状图。风险指示图等,都是自己画。随着难度的添加。越来越力不从心。曾经研究过achartenginee图标框架,但发现achartenginee的可定制性实在不敢恭维,做出来的图标根本不能满足需求。所以又在github上搜索android chart,发现了排第一的这款图标框架。大概预计了一下,是符合自己的要求的,于是down下来。研究研究,确实要比其它已知的框架强大。特此,总结一下其使用方法。

MPChart框架的长处:1.简单易用,全部的图标都能够当做一个普通的View在我们的布局文件里定义。与在布局中定义一个TextView没有不论什么的差别,使用也基本一样,通过fandViewById()就可以。然后向chart中加入数据就可以。

2.完好的事件冲突处理。在使用achartenginee时,发现图表一旦放在ScrollView中,则会产生事件冲突,导致ScrollView滑动不灵敏,而MPChart在事件处理上堪称完美。不仅在ScrollView中不会引起不论什么事件冲突,并且图表还能够夸张的放在LIstView,ViewPager中。不要太强大啊。

3.强大的可定制性,仅仅要是你能看到的。就能够改动为你想要的样式,这一点是我选择它的主要长处。

4.一句话就可实现的动画效果,但有点小bug.但作者还在不停的更新。

基于以上几点,我们基本能够抱起其它的图表框架而一心使用MPChart就可以,以下先看一下源代码demo的效果图,以及我自己定制的一个曲线图:

                           

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="474" width="373" >

                        

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="463" width="413" >

效果简直不谈啊,太强大了,必须学会使用啊。

以下讲一下我对其代码结构的理解:

1.源代码charts包中定义了全部能够绘制的图标类型。包含曲线图。饼状图,柱状图,散点图,以及混合图。

chart主要处理图表的交互事件。动画,组件的绘制等。

2.源代码components包中定义了图表中全部的组件,包含x轴(XAxis),y轴(YAxis)。表头(Lenged),标识(MarkerView).

3.源代码data包中则是不同类型的图表须要不同的数据类型。

4.源代码listener包中定义了全部的事件类型。

这几个包是我们须要知道的,通过chart包中的随意一个实例,能够进行我们须要的不论什么定制。比如:想要定制X轴的数据或者样式。

XAxis xAxis = mChart.getXAxis();

xAxis.setPosition(); //定制X轴是在图表上方还是下方。

xAxis.setLabelsToSkip(); //定制X轴Label间隔。

xAxis.setAvoidFirstLastClipping(); //定制X轴起点和终点Label不能超出屏幕。

Y轴的操作类似。

Lenged l = mChart.getLenged();

l.setEnabled(); //定制表头是否显示。

l.setForm();  //定制表头样式。是circle,square。还是line

等等,仅仅要是你能看到的样式,都能够定制。你没看到的也能够定制。以下列贴出第一个我定制的图的源代码:

                lineView = new LineChart(this);
		lineView.setDescription("");
		lineView.setScaleEnabled(false);
		lineView.getAxisRight().setEnabled(true);
		lineView.setDrawGridBackground(false);
		lineView.setTouchEnabled(false); //设置图表滑动是否可用
		lineView.getLegend().setEnabled(false); //设置表头不可用
		lineView.setHardwareAccelerationEnabled(true);

		ArrayList<Entry> yRawData = new ArrayList<Entry>();
		ArrayList<String> xRawDatas = new ArrayList<String>();
		int index = 0;
		for (int i = array.length() - 1; i >= 0; i--)
		{
			if (array.get(i) != null)
			{
				JSONObject jsonObj = (JSONObject) array.get(i);
				yRawData.add(new Entry(Float.parseFloat(jsonObj.optString("profitRate")), index));
				xRawDatas.add(DateFormatHelp.formatDateToNeededFormat(jsonObj.optString("dt").concat("000"),
						DateFormat.DATE_1));
				index++;
				initMaxMin(Float.parseFloat(jsonObj.optString("profitRate")));
			}
		}
		/**
		 * x轴样式设置
		 */
		XAxis xAxis = lineView.getXAxis();
		xAxis.setPosition(XAxisPosition.BOTTOM);// 设置x轴在底部显示
		xAxis.setAvoidFirstLastClipping(true);
		xAxis.setSpaceBetweenLabels(0); // x轴间距
		xAxis.setTextColor(resource.getColor(R.color.grey_low_txt));
		xAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));
		xAxis.setDrawGridLines(true);//设置是否显示横轴表格
		xAxis.setGridColor(resource.getColor(R.color.color_dddddd));//设置x轴表格颜色
		/**
		 * y轴样式设置
		 */
		YAxis leftAxis = lineView.getAxisLeft();
		leftAxis.setStartAtZero(false);
		leftAxis.setLabelCount(yAxislabelNum, true);  //设置Y轴Label数量
		leftAxis.setDrawLimitLinesBehindData(true);
		leftAxis.setTextColor(resource.getColor(R.color.grey_low_txt)); //设置左側Y轴Label颜色
		leftAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd)); //设置左側Y轴颜色

		leftAxis.setDrawGridLines(true); //设置显示Y轴表格线
		leftAxis.setGridColor(resource.getColor(R.color.color_dddddd)); //设置Y轴表格线颜色
		leftAxis.setAxisMaxValue(yAxisMax + yAxisGap); // 设置Y轴最大值
		leftAxis.setAxisMinValue(yAxisMin - yAxisGap);// 设置Y轴最小值

		YAxis rightAxis = lineView.getAxisRight();
		rightAxis.setDrawLabels(false);   //设置右側Y轴是否显示 Label
		rightAxis.setDrawGridLines(false);
		rightAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));
		/**
		 * 曲线样式设置
		 */
		LineDataSet set = new LineDataSet(yRawData, "");
		set.setDrawCubic(true);  //设置曲线样式为cubie
		set.setCubicIntensity(0.2f);//置曲线顺滑度
		set.setLineWidth(Util.dip2px(this, 1.0f)); //射置曲线width
		set.setColor(resource.getColor(R.color.color_fd4634));//射置曲线颜色
		set.setCircleSize(Util.dip2px(this, 2.0f));//射置曲线上圆点大小
		set.setCircleColor(resource.getColor(R.color.color_fd4634));//射置曲线上圆点颜色
		set.setFillColor(resource.getColor(R.color.color_fd4634));//射置曲线填充颜色
		set.setFillAlpha(128);//射置曲线填充颜色透明度
		set.setDrawFilled(true);//设置曲线填冲是否启用
		set.setDrawValues(false);//设置是否显示点值
		LineData data = new LineData(xRawDatas, set);
		lineView.setData(data);//绑定数据到图表
		lineView.invalidate();

		LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, Util.dip2px(this, 150));
		contentLayout.addView(lineView, params);

学会使用这个图表框架后。效率能够大大的提高。普通的图表需求也不用在操心了。。

时间: 2024-10-09 10:07:59

android MPChart图标使用具体解释的相关文章

Android开发之异步具体解释(一)Thread+Handler

请尊重他人的劳动成果,转载请注明出处:  Android开发之异步具体解释(一)Thread+Handler http://blog.csdn.net/fengyuzhengfan/article/details/40211589 在Android实际开发project中常常会进行一些诸如:文件读写.訪问网络等耗时的操作,这些耗时的操作是不建议放到UI线程里的. 所以我们会新开一个线程.在子线程中进行这些耗时的操作.耗时操作过程中.UI常常须要更新,但Android是不同意在子线程中改动UI的.

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

Android源代码下载方法具体解释

作者:张星 相信非常多下载过内核的人都对这个非常熟悉 git clone git://android.git.kernel.org/kernel/common.git kernel 可是这是在曾经,如今假设这么运行的话,会显演示样例如以下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ android.git.kernel.org[0: 149.20.4.77]: errno=Connection ref

Android 事件分发机制具体解释

很多其它内容请參照我的个人网站: http://stackvoid.com/ 网上非常多关于Android事件分发机制的解释,大多数描写叙述的都不够清晰,没有吧来龙去脉搞清晰,本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析. 产生Touch事件 这部分牵扯到硬件和Linux内核部分:我们简单讲述一下这部分内容,假设有兴趣的话能够參考这篇文章. 传递Touch事件 触摸事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在

android 日历图标显示星期

上一篇文档中谈到了在日历图标上显示当前日期, 现在我添加了几行代码,可以在日历图标上显示对应的星期: 修改源码是在Utilities.java中 函数createCalendarIconBitmap 添加几行代码: int dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); String weekStrings[] = {"周日","周一","周二","周三&quo

Android 系统 图标的使用

参考链接:Android 系统图标及使用 Android系统图标查看: android.R.drawable 使用方式: 在Java代码中: myMenuItem.setIcon(android.R.drawable.ic_menu_XXX); 在xml文件中: android:icon="@android:drawable/ic_menu_XXX" Android 系统图标展示

制作一个漂亮的 Android 应用图标

Android应用图标应当是一个 Alpha 通道透明的32位 PNG 图片.由于安卓设备众多,一个应用程序图标需要设计几种不同大小,如: LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px.MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px.HDPI (High Density Screen, 240 DPI),其图标大小为 72 x 72 px.xhdpi (Extra-high

Android中时间戳的详细解释

Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: (1).在银行account表中建立时间戳字段timestamp,设定为文本类型varchar. (2).当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456. (3).当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A