Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了


在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解

承上启下,当我们学习完这篇

之后,你对MPAndroidChart的套路应该是有一定的了解了,用来用去就是那么几个不断的扩展,那我们今天扩展一下双轴的图标,什么是双轴呢?就是两个x或者两个y轴,看图

为了形成鲜明的对比,我把背景设置成黑色的了,我们来看下这个我们应该怎么去实现?

一.基本实现

这里布局还是那个老布局

  1. <com.github.mikephil.charting.charts.LineChart
  2. android:id="@+id/mDoubleLineChar"
  3. android:layout_width="match_parent"
  4. android:layout_height="0dp"
  5. android:layout_weight="1"/>

这次我就不那么温柔了,我直接开始撸了,首先是初始化

  1. mDoubleLineChar = (LineChart) findViewById(R.id.mDoubleLineChar);
  2. //设置数值选择监听
  3. mDoubleLineChar.setOnChartValueSelectedListener(this);
  4. // 没有描述的文本
  5. mDoubleLineChar.getDescription().setEnabled(false);
  6. // 支持触控手势
  7. mDoubleLineChar.setTouchEnabled(true);
  8. mDoubleLineChar.setDragDecelerationFrictionCoef(0.9f);
  9. // 支持缩放和拖动
  10. mDoubleLineChar.setDragEnabled(true);
  11. mDoubleLineChar.setScaleEnabled(true);
  12. mDoubleLineChar.setDrawGridBackground(false);
  13. mDoubleLineChar.setHighlightPerDragEnabled(true);
  14. // 如果禁用,扩展可以在x轴和y轴分别完成
  15. mDoubleLineChar.setPinchZoom(true);
  16. // 设置背景颜色(灰色)
  17. mDoubleLineChar.setBackgroundColor(Color.BLACK);
  18. //设置数据
  19. setData(20, 30);
  20. //默认x动画
  21. mDoubleLineChar.animateX(2500);

这里还是老样子,设置一些手势监听,缩放等,然后设置背景颜色,这里我设置的颜色就是黑色,然后设置数据和动画,设置数据我们等下说,我们先来看划线

首先这里绘制了下面的三个文本

  1. //修改
  2. l.setForm(Legend.LegendForm.LINE);
  3. l.setTextSize(11f);
  4. l.setTextColor(Color.WHITE);
  5. l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
  6. l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
  7. l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
  8. l.setDrawInside(false);

然后设置x轴,这都是和之前的类似,没什么问题

  1. //x轴
  2. XAxis xAxis = mDoubleLineChar.getXAxis();
  3. xAxis.setTextSize(11f);
  4. xAxis.setTextColor(Color.WHITE);
  5. xAxis.setDrawGridLines(false);
  6. xAxis.setDrawAxisLine(false);

但是现在有两个y轴,我们应该怎么设置呢? 不就是设置两个y轴,多轴也是没问题的,只要你的坐标都设置的好

  1. //左边y轴
  2. YAxis leftAxis = mDoubleLineChar.getAxisLeft();
  3. leftAxis.setTextColor(ColorTemplate.getHoloBlue());
  4. leftAxis.setAxisMaximum(200f);
  5. leftAxis.setAxisMinimum(0f);
  6. leftAxis.setDrawGridLines(true);
  7. leftAxis.setGranularityEnabled(true);
  8. //右边
  9. YAxis rightAxis = mDoubleLineChar.getAxisRight();
  10. rightAxis.setTextColor(Color.RED);
  11. rightAxis.setAxisMaximum(900);
  12. rightAxis.setAxisMinimum(-200);
  13. rightAxis.setDrawGridLines(false);
  14. rightAxis.setDrawZeroLine(false);
  15. rightAxis.setGranularityEnabled(false);

好的,到这里数据什么的,都没什么变化,我们设置,这里我采用的是随机数,不过这并不影响,我们理解,因为这里有三个arrayList,说明我们定义的就是三根线

  1. //设置数据
  2. private void setData(int count, float range) {
  3. ArrayList<Entry> yVals1 = new ArrayList<Entry>();
  4. for (int i = 0; i < count; i++) {
  5. float mult = range / 2f;
  6. float val = (float) (Math.random() * mult) + 50;
  7. yVals1.add(new Entry(i, val));
  8. }
  9. ArrayList<Entry> yVals2 = new ArrayList<Entry>();
  10. for (int i = 0; i < count - 1; i++) {
  11. float mult = range;
  12. float val = (float) (Math.random() * mult) + 450;
  13. yVals2.add(new Entry(i, val));
  14. }
  15. ArrayList<Entry> yVals3 = new ArrayList<Entry>();
  16. for (int i = 0; i < count; i++) {
  17. float mult = range;
  18. float val = (float) (Math.random() * mult) + 500;
  19. yVals3.add(new Entry(i, val));
  20. }
  21. LineDataSet set1, set2, set3;
  22. if (mDoubleLineChar.getData() != null &&
  23. mDoubleLineChar.getData().getDataSetCount() > 0) {
  24. set1 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(0);
  25. set2 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(1);
  26. set3 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(2);
  27. set1.setValues(yVals1);
  28. set2.setValues(yVals2);
  29. set3.setValues(yVals3);
  30. mDoubleLineChar.getData().notifyDataChanged();
  31. mDoubleLineChar.notifyDataSetChanged();
  32. } else {
  33. // 创建一个数据集,并给它一个类型
  34. set1 = new LineDataSet(yVals1, "鸡群");
  35. set1.setAxisDependency(YAxis.AxisDependency.LEFT);
  36. set1.isDrawValuesEnabled();
  37. set1.setColor(ColorTemplate.getHoloBlue());
  38. set1.setCircleColor(Color.WHITE);
  39. set1.setLineWidth(2f);
  40. set1.setCircleRadius(3f);
  41. set1.setFillAlpha(65);
  42. set1.setFillColor(ColorTemplate.getHoloBlue());
  43. set1.setHighLightColor(Color.rgb(244, 117, 117));
  44. set1.setDrawCircleHole(false);
  45. //创建一个数据集,并给它一个类型
  46. set2 = new LineDataSet(yVals2, "鸭群");
  47. set1.isDrawValuesEnabled();
  48. set2.setAxisDependency(YAxis.AxisDependency.RIGHT);
  49. set2.setColor(Color.RED);
  50. set2.setCircleColor(Color.WHITE);
  51. set2.setLineWidth(2f);
  52. set2.setCircleRadius(3f);
  53. set2.setFillAlpha(65);
  54. set2.setFillColor(Color.RED);
  55. set2.setDrawCircleHole(false);
  56. set2.setHighLightColor(Color.rgb(244, 117, 117));
  57. set3 = new LineDataSet(yVals3, "鹅群");
  58. set3.setAxisDependency(YAxis.AxisDependency.RIGHT);
  59. set3.setColor(Color.YELLOW);
  60. set1.isDrawValuesEnabled();
  61. set3.setCircleColor(Color.WHITE);
  62. set3.setLineWidth(2f);
  63. set3.setCircleRadius(3f);
  64. set3.setFillAlpha(65);
  65. set3.setFillColor(ColorTemplate.colorWithAlpha(Color.YELLOW, 200));
  66. set3.setDrawCircleHole(false);
  67. set3.setHighLightColor(Color.rgb(244, 117, 117));
  68. // 创建一个数据集的数据对象
  69. LineData data = new LineData(set1, set2, set3);
  70. data.setValueTextColor(Color.WHITE);
  71. data.setValueTextSize(9f);
  72. //设置数据
  73. mDoubleLineChar.setData(data);
  74. }
  75. }

然后依次实现三个LineDataSet,设置颜色,大小等相关属性,最后全部转换成一个LineData,最后给到我们的linechar,这就是一个完整的转换过程了,运行的结果就是上面的那幅图

二.显示顶点值

三.是否填满

四.是否显示圆点

五.切换立方

六.切换尖角/矩形

七.切换横向立方

八.x轴动画

九.y轴动画

十.xy轴动画

上面的是部分的演示效果,我想说的是,都是很简单的调用,唉,我把代码贴出来大家都更加了解了

layout_ linechar_double.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical">
  7. <com.github.mikephil.charting.charts.LineChart
  8. android:id="@+id/mDoubleLineChar"
  9. android:layout_width="match_parent"
  10. android:layout_height="0dp"
  11. android:layout_weight="1"/>
  12. <LinearLayout
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:orientation="horizontal">
  16. <Button
  17. android:id="@+id/btn_show_values"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="顶点显示值"/>
  21. <Button
  22. android:id="@+id/btn_actionToggleFilled"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:text="是否填满"/>
  26. <Button
  27. android:id="@+id/btn_actionToggleCircles"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:text="是否显示圆点"/>
  31. <Button
  32. android:id="@+id/btn_actionToggleCubic"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:text="切换立方"/>
  36. </LinearLayout>
  37. <LinearLayout
  38. android:layout_width="match_parent"
  39. android:layout_height="wrap_content"
  40. android:orientation="horizontal">
  41. <Button
  42. android:id="@+id/btn_actionToggleStepped"
  43. android:layout_width="wrap_content"
  44. android:layout_height="wrap_content"
  45. android:text="切换尖角/矩形"/>
  46. <Button
  47. android:id="@+id/btn_actionToggleHorizontalCubic"
  48. android:layout_width="wrap_content"
  49. android:layout_height="wrap_content"
  50. android:text="切换横向立方"/>
  51. <Button
  52. android:id="@+id/btn_anim_x"
  53. android:layout_width="wrap_content"
  54. android:layout_height="wrap_content"
  55. android:text="X轴动画"/>
  56. <Button
  57. android:id="@+id/btn_anim_y"
  58. android:layout_width="wrap_content"
  59. android:layout_height="wrap_content"
  60. android:text="Y轴动画"/>
  61. </LinearLayout>
  62. <LinearLayout
  63. android:layout_width="match_parent"
  64. android:layout_height="wrap_content"
  65. android:orientation="horizontal">
  66. <Button
  67. android:id="@+id/btn_anim_xy"
  68. android:layout_width="wrap_content"
  69. android:layout_height="wrap_content"
  70. android:text="XY轴动画"/>
  71. <Button
  72. android:id="@+id/btn_save_sd"
  73. android:layout_width="wrap_content"
  74. android:layout_height="wrap_content"
  75. android:text="保存到SD卡"/>
  76. <Button
  77. android:id="@+id/btn_auto_mix_max"
  78. android:layout_width="wrap_content"
  79. android:layout_height="wrap_content"
  80. android:text="切换自动最大最小值"/>
  81. </LinearLayout>
  82. </LinearLayout>

DoubleLineCharActivity

  1. public class DoubleLineCharActivity extends BaseActivity implements OnChartValueSelectedListener, View.OnClickListener {
  2. private LineChart mDoubleLineChar;
  3. //显示顶点值
  4. private Button btn_show_values;
  5. //是否填满
  6. private Button btn_actionToggleFilled;
  7. //是否显示圆点
  8. private Button btn_actionToggleCircles;
  9. //切换立方
  10. private Button btn_actionToggleCubic;
  11. //切换尖角/矩形
  12. private Button btn_actionToggleStepped;
  13. //切换横向立方
  14. private Button btn_actionToggleHorizontalCubic;
  15. //x轴动画
  16. private Button btn_anim_x;
  17. //y轴动画
  18. private Button btn_anim_y;
  19. //xy轴动画
  20. private Button btn_anim_xy;
  21. //保存到sd卡
  22. private Button btn_save_sd;
  23. //切换自动最大最小值
  24. private Button btn_auto_mix_max;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_linechar_double);
  29. initView();
  30. }
  31. //初始化View
  32. private void initView() {
  33. //基本控件
  34. btn_show_values = (Button) findViewById(R.id.btn_show_values);
  35. btn_show_values.setOnClickListener(this);
  36. btn_actionToggleFilled = (Button) findViewById(R.id.btn_actionToggleFilled);
  37. btn_actionToggleFilled.setOnClickListener(this);
  38. btn_actionToggleCircles = (Button) findViewById(R.id.btn_actionToggleCircles);
  39. btn_actionToggleCircles.setOnClickListener(this);
  40. btn_actionToggleCubic = (Button) findViewById(R.id.btn_actionToggleCubic);
  41. btn_actionToggleCubic.setOnClickListener(this);
  42. btn_actionToggleStepped = (Button) findViewById(R.id.btn_actionToggleStepped);
  43. btn_actionToggleStepped.setOnClickListener(this);
  44. btn_actionToggleHorizontalCubic = (Button) findViewById(R.id.btn_actionToggleHorizontalCubic);
  45. btn_actionToggleHorizontalCubic.setOnClickListener(this);
  46. btn_anim_x = (Button) findViewById(R.id.btn_anim_x);
  47. btn_anim_x.setOnClickListener(this);
  48. btn_anim_y = (Button) findViewById(R.id.btn_anim_y);
  49. btn_anim_y.setOnClickListener(this);
  50. btn_anim_xy = (Button) findViewById(R.id.btn_anim_xy);
  51. btn_anim_xy.setOnClickListener(this);
  52. btn_save_sd = (Button) findViewById(R.id.btn_save_sd);
  53. btn_save_sd.setOnClickListener(this);
  54. btn_auto_mix_max = (Button) findViewById(R.id.btn_auto_mix_max);
  55. btn_auto_mix_max.setOnClickListener(this);
  56. mDoubleLineChar = (LineChart) findViewById(R.id.mDoubleLineChar);
  57. //设置数值选择监听
  58. mDoubleLineChar.setOnChartValueSelectedListener(this);
  59. // 没有描述的文本
  60. mDoubleLineChar.getDescription().setEnabled(false);
  61. // 支持触控手势
  62. mDoubleLineChar.setTouchEnabled(true);
  63. mDoubleLineChar.setDragDecelerationFrictionCoef(0.9f);
  64. // 支持缩放和拖动
  65. mDoubleLineChar.setDragEnabled(true);
  66. mDoubleLineChar.setScaleEnabled(true);
  67. mDoubleLineChar.setDrawGridBackground(false);
  68. mDoubleLineChar.setHighlightPerDragEnabled(true);
  69. // 如果禁用,扩展可以在x轴和y轴分别完成
  70. mDoubleLineChar.setPinchZoom(true);
  71. // 设置背景颜色(灰色)
  72. mDoubleLineChar.setBackgroundColor(Color.BLACK);
  73. //设置数据
  74. setData(20, 30);
  75. //默认x动画
  76. mDoubleLineChar.animateX(2500);
  77. //获得数据
  78. Legend l = mDoubleLineChar.getLegend();
  79. //修改
  80. l.setForm(Legend.LegendForm.LINE);
  81. l.setTextSize(11f);
  82. l.setTextColor(Color.WHITE);
  83. l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
  84. l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
  85. l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
  86. l.setDrawInside(false);
  87. //x轴
  88. XAxis xAxis = mDoubleLineChar.getXAxis();
  89. xAxis.setTextSize(11f);
  90. xAxis.setTextColor(Color.WHITE);
  91. xAxis.setDrawGridLines(false);
  92. xAxis.setDrawAxisLine(false);
  93. //左边y轴
  94. YAxis leftAxis = mDoubleLineChar.getAxisLeft();
  95. leftAxis.setTextColor(ColorTemplate.getHoloBlue());
  96. leftAxis.setAxisMaximum(200f);
  97. leftAxis.setAxisMinimum(0f);
  98. leftAxis.setDrawGridLines(true);
  99. leftAxis.setGranularityEnabled(true);
  100. //右边
  101. YAxis rightAxis = mDoubleLineChar.getAxisRight();
  102. rightAxis.setTextColor(Color.RED);
  103. rightAxis.setAxisMaximum(900);
  104. rightAxis.setAxisMinimum(-200);
  105. rightAxis.setDrawGridLines(false);
  106. rightAxis.setDrawZeroLine(false);
  107. rightAxis.setGranularityEnabled(false);
  108. }
  109. //设置数据
  110. private void setData(int count, float range) {
  111. ArrayList<Entry> yVals1 = new ArrayList<Entry>();
  112. for (int i = 0; i < count; i++) {
  113. float mult = range / 2f;
  114. float val = (float) (Math.random() * mult) + 50;
  115. yVals1.add(new Entry(i, val));
  116. }
  117. ArrayList<Entry> yVals2 = new ArrayList<Entry>();
  118. for (int i = 0; i < count - 1; i++) {
  119. float mult = range;
  120. float val = (float) (Math.random() * mult) + 450;
  121. yVals2.add(new Entry(i, val));
  122. }
  123. ArrayList<Entry> yVals3 = new ArrayList<Entry>();
  124. for (int i = 0; i < count; i++) {
  125. float mult = range;
  126. float val = (float) (Math.random() * mult) + 500;
  127. yVals3.add(new Entry(i, val));
  128. }
  129. LineDataSet set1, set2, set3;
  130. if (mDoubleLineChar.getData() != null &&
  131. mDoubleLineChar.getData().getDataSetCount() > 0) {
  132. set1 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(0);
  133. set2 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(1);
  134. set3 = (LineDataSet) mDoubleLineChar.getData().getDataSetByIndex(2);
  135. set1.setValues(yVals1);
  136. set2.setValues(yVals2);
  137. set3.setValues(yVals3);
  138. mDoubleLineChar.getData().notifyDataChanged();
  139. mDoubleLineChar.notifyDataSetChanged();
  140. } else {
  141. // 创建一个数据集,并给它一个类型
  142. set1 = new LineDataSet(yVals1, "鸡群");
  143. set1.setAxisDependency(YAxis.AxisDependency.LEFT);
  144. set1.isDrawValuesEnabled();
  145. set1.setColor(ColorTemplate.getHoloBlue());
  146. set1.setCircleColor(Color.WHITE);
  147. set1.setLineWidth(2f);
  148. set1.setCircleRadius(3f);
  149. set1.setFillAlpha(65);
  150. set1.setFillColor(ColorTemplate.getHoloBlue());
  151. set1.setHighLightColor(Color.rgb(244, 117, 117));
  152. set1.setDrawCircleHole(false);
  153. //创建一个数据集,并给它一个类型
  154. set2 = new LineDataSet(yVals2, "鸭群");
  155. set1.isDrawValuesEnabled();
  156. set2.setAxisDependency(YAxis.AxisDependency.RIGHT);
  157. set2.setColor(Color.RED);
  158. set2.setCircleColor(Color.WHITE);
  159. set2.setLineWidth(2f);
  160. set2.setCircleRadius(3f);
  161. set2.setFillAlpha(65);
  162. set2.setFillColor(Color.RED);
  163. set2.setDrawCircleHole(false);
  164. set2.setHighLightColor(Color.rgb(244, 117, 117));
  165. set3 = new LineDataSet(yVals3, "鹅群");
  166. set3.setAxisDependency(YAxis.AxisDependency.RIGHT);
  167. set3.setColor(Color.YELLOW);
  168. set1.isDrawValuesEnabled();
  169. set3.setCircleColor(Color.WHITE);
  170. set3.setLineWidth(2f);
  171. set3.setCircleRadius(3f);
  172. set3.setFillAlpha(65);
  173. set3.setFillColor(ColorTemplate.colorWithAlpha(Color.YELLOW, 200));
  174. set3.setDrawCircleHole(false);
  175. set3.setHighLightColor(Color.rgb(244, 117, 117));
  176. // 创建一个数据集的数据对象
  177. LineData data = new LineData(set1, set2, set3);
  178. data.setValueTextColor(Color.WHITE);
  179. data.setValueTextSize(9f);
  180. //设置数据
  181. mDoubleLineChar.setData(data);
  182. }
  183. }
  184. @Override
  185. public void onValueSelected(Entry e, Highlight h) {
  186. }
  187. @Override
  188. public void onNothingSelected() {
  189. }
  190. @Override
  191. public void onClick(View v) {
  192. switch (v.getId()) {
  193. //显示顶点的值开关
  194. case R.id.btn_show_values:
  195. //获取到当前值
  196. List<ILineDataSet> sets = mDoubleLineChar.getData().getDataSets();
  197. for (ILineDataSet iSet : sets) {
  198. LineDataSet set = (LineDataSet) iSet;
  199. //切换显示/隐藏
  200. set.setDrawValues(!set.isDrawValuesEnabled());
  201. }
  202. //刷新
  203. mDoubleLineChar.invalidate();
  204. break;
  205. //是否填满
  206. case R.id.btn_actionToggleFilled:
  207. List<ILineDataSet> setsFilled = mDoubleLineChar.getData().getDataSets();
  208. for (ILineDataSet iSet : setsFilled) {
  209. LineDataSet set = (LineDataSet) iSet;
  210. if (set.isDrawFilledEnabled())
  211. set.setDrawFilled(false);
  212. else
  213. set.setDrawFilled(true);
  214. }
  215. mDoubleLineChar.invalidate();
  216. break;
  217. //是否显示圆点
  218. case R.id.btn_actionToggleCircles:
  219. List<ILineDataSet> setsCircles = mDoubleLineChar.getData().getDataSets();
  220. for (ILineDataSet iSet : setsCircles) {
  221. LineDataSet set = (LineDataSet) iSet;
  222. if (set.isDrawCirclesEnabled())
  223. set.setDrawCircles(false);
  224. else
  225. set.setDrawCircles(true);
  226. }
  227. mDoubleLineChar.invalidate();
  228. break;
  229. //切换立方
  230. case R.id.btn_actionToggleCubic:
  231. List<ILineDataSet> setsCubic = mDoubleLineChar.getData().getDataSets();
  232. for (ILineDataSet iSet : setsCubic) {
  233. LineDataSet set = (LineDataSet) iSet;
  234. set.setMode(set.getMode() == LineDataSet.Mode.CUBIC_BEZIER
  235. ? LineDataSet.Mode.LINEAR
  236. : LineDataSet.Mode.CUBIC_BEZIER);
  237. }
  238. mDoubleLineChar.invalidate();
  239. break;
  240. //切换尖角/矩形
  241. case R.id.btn_actionToggleStepped:
  242. List<ILineDataSet> setsStepped = mDoubleLineChar.getData().getDataSets();
  243. for (ILineDataSet iSet : setsStepped) {
  244. LineDataSet set = (LineDataSet) iSet;
  245. set.setMode(set.getMode() == LineDataSet.Mode.STEPPED
  246. ? LineDataSet.Mode.LINEAR
  247. : LineDataSet.Mode.STEPPED);
  248. }
  249. mDoubleLineChar.invalidate();
  250. break;
  251. //切换横向立方
  252. case R.id.btn_actionToggleHorizontalCubic:
  253. List<ILineDataSet> setsHorizontalCubic = mDoubleLineChar.getData().getDataSets();
  254. for (ILineDataSet iSet : setsHorizontalCubic) {
  255. LineDataSet set = (LineDataSet) iSet;
  256. set.setMode(set.getMode() == LineDataSet.Mode.HORIZONTAL_BEZIER
  257. ? LineDataSet.Mode.LINEAR
  258. : LineDataSet.Mode.HORIZONTAL_BEZIER);
  259. }
  260. mDoubleLineChar.invalidate();
  261. break;
  262. //x轴动画
  263. case R.id.btn_anim_x:
  264. mDoubleLineChar.animateX(3000);
  265. break;
  266. //y轴动画
  267. case R.id.btn_anim_y:
  268. mDoubleLineChar.animateY(3000, Easing.EasingOption.EaseInCubic);
  269. break;
  270. //xy轴动画
  271. case R.id.btn_anim_xy:
  272. mDoubleLineChar.animateXY(3000, 3000);
  273. break;
  274. //保存到sd卡
  275. case R.id.btn_save_sd:
  276. if (mDoubleLineChar.saveToPath("title" + System.currentTimeMillis(), "")) {
  277. Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
  278. } else
  279. Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
  280. break;
  281. //切换自动最大最小值
  282. case R.id.btn_auto_mix_max:
  283. mDoubleLineChar.setAutoScaleMinMaxEnabled(!mDoubleLineChar.isAutoScaleMinMaxEnabled());
  284. mDoubleLineChar.notifyDataSetChanged();
  285. break;
  286. }
  287. }
  288. }

送上一个实际的演示效果:

OK,是不是把套路学会了?没有学会没关系,基佬群欢迎你

欢迎加入:555974449

国际惯例:http://download.csdn.net/detail/qq_26787115/9684705

Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了的更多相关文章

  1. Android图表库MPAndroidChart(五)——自定义MarkerView实现选中高亮

    Android图表库MPAndroidChart(五)--自定义MarkerView实现选中高亮 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  2. Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路

    Android图表库MPAndroidChart(四)--条形图的绘制过程过程,隐隐约约我看到了套路 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...

  3. Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的

    Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  4. Android图表库MPAndroidChart(十一)——多层级的堆叠条形图

    Android图表库MPAndroidChart(十一)--多层级的堆叠条形图 事实上这个也是条形图的一种扩展,我们看下效果就知道了 是吧,他一般满足的需求就是同类数据比较了,不过目前我还真没看过哪个 ...

  5. Android图表库MPAndroidChart(十三)——简约的底部柱状图

    Android图表库MPAndroidChart(十三)--简约的底部柱状图 我们继续上一讲,今天还是说下柱状图,这个图的话应该是用的比较多的,所有拿出来溜溜,先看下效果 我们还是来看下基本实现 一. ...

  6. Android图表库MPAndroidChart(十二)——来点不一样的,正负堆叠条形图

    Android图表库MPAndroidChart(十二)--来点不一样的,正负堆叠条形图 接上篇,今天要说的,和上篇的类似,只是方向是有相反的两面,我们先看下效果 实际上这样就导致了我们的代码是比较类 ...

  7. Android图表库MPAndroidChart(十)——散点图的孪生兄弟气泡图

    Android图表库MPAndroidChart(十)--散点图的孪生兄弟气泡图 起泡图和散点图如出一辙,但是个人认为要比散点图好看一点,我们来看下实际的演示效果 这个和散点图的实现很相似,我们一起来 ...

  8. Android图表库MPAndroidChart(九)——神神秘秘的散点图

    Android图表库MPAndroidChart(九)--神神秘秘的散点图 今天所的散点图可能用的人不多,但是也算是图表界的一股清流,我们来看下实际的效果 添加的数据有点少,但是足以表示散点图了,我们 ...

  9. Android图表库MPAndroidChart(八)——饼状图的扩展:折线饼状图

    Android图表库MPAndroidChart(八)--饼状图的扩展:折线饼状图 我们接着上文,饼状图的扩展,增加折现的说明,来看下我们要实现的效果 因为之前对MPAndroidChart的熟悉,所 ...

随机推荐

  1. Java知IO

    ---恢复内容开始--- Java将IO(文件.网络.终端)封装成非常多的类,看似繁杂,其实每个类的具有独特的功能. 按照存取的对象是二进制还是文本,java使用字节流和字符流实现IO. 流是java ...

  2. SpringContextUtil 的配置和调用

    首先:在springmvc里面配置 <bean id="springContextUtil" class="com.hna.hka.rmc.common.util. ...

  3. HTML5中meta属性大集合

    1.声明文档的字符编码 <meta charset='utf-8'> 2.声明文档的兼容模式 <meta http-equiv="X-UA-Compatible" ...

  4. 原生http请求封装

    满血复活,今天开始开始更新博客.随着es6的普遍应用,promise属性也随之用之普遍,我们在一些项目中,为了避免引入一些http库,节省空间,就简单将原生http请求做了封装处理,封装代码如下:(其 ...

  5. python字符串-内置方法用法分析

    1.字母大小写相关(中文无效) 1.1 S.upper() -> string 返回一个字母全部大写的副本

  6. Scrapy定时执行爬取任务与定时关闭任务

    当我们利用Python scrapy框架写完脚本后,脚本已经可以稳定的进行数据的爬取,但是每次需要手动的执行,太麻烦,如果能自动运行,在自动关闭那就好了,经过小编研究,完全是可以实现的,今天小编介绍2 ...

  7. Docker And Swarm Mode(一)

    (一)节点的创建和配置 前言  虽然工作中一直在用Docker和Docker Swarm,但是总感觉有点陌生,总想自己亲手来写写和配置Docker 容器相关的事情,这篇文章主要是参考了Los Tech ...

  8. [BeiJing2011]元素

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力 ...

  9. bzoj 1058: [ZJOI2007]报表统计

    Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...

  10. 【GDOI】【图论-最短路】时间与空间之旅

    最近打的一场校内训练的某题原题... 题目如下: Description 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spa ...