这篇文章主要介绍如何使用MPAndroidChart库实现K线面板的相关功能,我们会着重介绍以下几个方面:

1.绘制K线图和展示股票数据

2.处理用户手势操作

3.拉伸和压缩K线图

最终的效果图:图1

绘制K线图和展示股票数据

绘制K线图需要用到真实的股票数据,网上有很多免费的接口可以使用,我们也可以自己编写一个股票数据接口 Python实现股票数据接口

1.将MPAndroidChart集成到项目中

在project根目录的build.gradle添加中央库地址:

allprojects {

repositories {

maven { url "https://jitpack.io" }

}

}

在项目build.gradle中添加相关依赖:

dependencies {

compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'

}

2.在布局文件中添加CandleStickChart

android:id="@+id/candler_chart"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_below="@+id/top_line"

android:layout_above="@+id/rl_bottom_view"/>

mChart = findViewById(R.id.candler_chart);

3.基本参数设置

设置提示文字

mChart.setNoDataTextDescription("加载中...");//如果没有数据的时候,会显示这个

设置背景颜色

mChart.setDrawGridBackground(false);//是否显示表格颜色mChart.setBackgroundColor(Color.BLACK);//设置背景mChart.setGridBackgroundColor(Color.BLACK);//设置表格背景色

设置坐标轴,坐标轴分为x轴、左y轴和右y轴,可以分别设置,这里我们取消x轴和右y轴,只设置左y轴的属性。

//设置x轴XAxis xAxis = mChart.getXAxis();

xAxis.setEnabled(false);

//设置y轴(左边)YAxis leftAxis = mChart.getAxisLeft();

leftAxis.setEnabled(true);

leftAxis.setLabelCount(5, false);

leftAxis.setDrawGridLines(true);//绘制网格线leftAxis.setDrawAxisLine(false);

leftAxis.setGridColor(ContextCompat.getColor(MainActivity.this, R.color.gray_overlay));//设置网格线的颜色leftAxis.setTextColor(Color.WHITE);//坐标轴文字颜色leftAxis.setValueFormatter(new MyYAxisValueFormatter());//坐标轴文字格式//设置y轴(右边)YAxis rightAxis = mChart.getAxisRight();

rightAxis.setEnabled(false);

设置高亮

mChart.setHighlightPerDragEnabled(false);//直接拖动屏幕时不显示高亮mChart.setHighlightPerTapEnabled(false);//点击屏幕时不显示高亮

设置监听(在第二个章节中我们会详细介绍如何使用这些监听实现各种手势操作,这里不再赘述)

mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {

@Override

public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {

if (isLongPressed) {

}

}

@Override

public void onNothingSelected() {

}

});

mChart.setOnChartGestureListener(new OnChartGestureListener() {

@Override

public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

}

@Override

public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

}

@Override

public void onChartLongPressed(MotionEvent me) {

}

@Override

public void onChartDoubleTapped(MotionEvent me) {

}

@Override

public void onChartSingleTapped(MotionEvent me) {

}

@Override

public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {

}

@Override

public void onChartScale(MotionEvent me, float scaleX, float scaleY) {

}

@Override

public void onChartTranslate(MotionEvent me, float dX, float dY) {

}

});

4.获取数据/添加数据

OkGo.get(HttpApi.BASE_URL).tag(this)

.params("code", tkCode)

.execute(new StringCallback() {

@Override

public void onSuccess(String s, Call call, Response response) {

try {

Log.d(TAG, s);

JSONObject result = new JSONObject(s);

if (result.getInt("code") == 200) {

loadError = false;

if (tkData != null) {

tkData.clear();

}

String data = result.getString("data");

JSONArray array = new JSONArray(data);

for (int i = 0; i < array.length(); i++) {

JSONObject item = (JSONObject) array.opt(array.length() - 1 - i);

//解析基础数据 TkDetailsBean bean = new TkDetailsBean(

item.getString("cur_min_price"), item.getString("cur_close_price"),

item.getString("cur_timer"), item.getString("cur_price_range"),

item.getString("cur_max_price"), item.getString("cur_total_money"),

item.getString("cur_total_volume"), item.getString("cur_open_price")

);

tkData.add(bean);

}

}

} catch (JSONException e) {

e.printStackTrace();

}

}

@Override

public void onError(Call call, Response response, Exception e) {

super.onError(call, response, e);

if (reLoad) {

loadStickData(tkCode, false);//首次加载失败时再次加载 } else {

loadError = true;

SharedPreferencesUtils.setCurrentTkCode(tkCode);

ToastUtils.makeToast(MainActivity.this, "加载失败,请检查网络");

}

}

获取到数据后我们创建一个CandleDataSet对象,CandleDataSet需要传入一个List类型的参数,这个参数就是待展示的股票数据

CandleEntry ce = new CandleEntry(i-start_index, shadowH, shadowL, open, close);

yVals.add(ce);

candleDataSet = new CandleDataSet(yVals, "");

candleDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);

candleDataSet.setShadowColor(Color.DKGRAY);//影线颜色candleDataSet.setShadowColorSameAsCandle(true);//影线颜色与实体一致candleDataSet.setShadowWidth(0.7f);//影线candleDataSet.setDecreasingColor(ContextCompat.getColor(MainActivity.this, R.color.blue_overlay));//下跌的颜色candleDataSet.setDecreasingPaintStyle(Paint.Style.FILL);//红涨,实体candleDataSet.setIncreasingColor(Color.RED);//上涨的颜色candleDataSet.setIncreasingPaintStyle(Paint.Style.STROKE);//绿跌,空心candleDataSet.setNeutralColor(Color.RED);//当天价格不涨不跌(一字线)颜色candleDataSet.setHighlightLineWidth(0.5f);//选中蜡烛时的线宽 candleDataSet.setDrawValues(false);//在图表中的元素上面是否显示数值candleDataSet.setHighLightColor(ContextCompat.getColor(MainActivity.this, R.color.y_page_bg));//高亮的颜色CandleData candleData = new CandleData(xVals, candleDataSet);

最后我们将candleDataSet绑定到CandleStickChart

mChart.setData(candleData);

到此为止,我们已经使用MPAndroidChart完成了一个静态的K线面板,下个章节我们将介绍如何为K线面板添加手势操作

mpchart点击_MPAndroidChart实现K线面板(一)相关推荐

  1. HQChart使用教程67 - 鼠标点击K线柱子监听事件

    HQChart使用教程67 - 鼠标点击K线柱子监听事件 点击K线事件 步骤 1. 注册监听事件 事件回调函数说明 参数说明: K线数据说明 交流QQ群: 950092318 HQChart代码地址 ...

  2. 小猫统计画股票K线图

    1.首先导入融易汇数据,比如导入000777,中核科技. 2.工具--金融分析.下拉列表中选择SZ000777. 点击某条K线图,弹出提示.

  3. HQChart实战教程23 - 点击K线显示历史分钟走势图

    HQChart实战教程23 - 点击K线显示历史分钟走势图 需求 步骤 1. 注册K线点击监听事件 2. 点击监听函数 使用网路回调函数请求历史分钟 交流QQ群:950092318 HQChart代码 ...

  4. XYMultipleSeriesRenderer 绘制K线图,点击弹出pop

    本文是讲述如何使用XYMultipleSeriesRenderer绘制K线图,并且点击弹出pop的实例,由于是从项目中摘出来的,所有只有主要代码并不是完成能够直接运行的程序. 依赖包下载:achart ...

  5. IDEA插件神操作,开发工具栏和Tab页,展示股票行情和K线

    目录 一.前言 二.需求目的 三.案例开发 1. 工程结构 2. tab 页窗体 3. 股票框体设置 4. 填充主面板到IDEA工具栏 5. 数据持久化配置 6. 股票接口 四.测试验证 1. 配置股 ...

  6. 通达信k线数据免费获取

    通达信软件官方免费提供沪深京日线.5分钟.1分钟k线数据下载,每日盘后提供当日数据下载,数据更新时间也很快,对于想要免费获取可靠数据进行投资的朋友来说是一个不错的选择 数据下载 通达信数据免费下载操作 ...

  7. 一分钟学会看k线图_看K线图:阴跌如钝刀

    一天跌一点,每天都跌,一天天就创出了新低,这就是阴跌:以较小波动的逐级下跌为主.体现在K线上,每天的K线都实体较小,期间夹杂着小阳线,伴随着成交量的缩减. 近期伦镍就是如此的图形.从4月中下旬起持续下 ...

  8. php k线图 echarts,利用ECharts.js画K线图的方法示例

    前言 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart 这个是Visual Studio里的自带控件,使用比较简单,不过数据这块需要在后 ...

  9. 1使用技巧_【掘金使用技巧1】合成长周期k线的函数

    用日线合成长周期k线 掘金API中的接口最长的周期是'1d'的,如果想要合成频率为周.月甚至年的应该怎么办呢?为此,写了一个函数来实现日k线合成长周期k线,欢迎大家一起讨论,不足之处请多指教. 基本思 ...

  10. HQChart钉钉小程序教程1-创建K线图

    HQChart钉钉小程序教程1-创建K线图,分时图 钉钉小程序HQChart效果图 步骤 1. 创建画布 2. 添加HQChart插件文件 3. import插件 4. 初始化HQChart插件 5. ...

最新文章

  1. QTP的那些事--学习QTP必备的网站整理
  2. [CF460E]Roland and Rose
  3. 仿真RM码,及在高斯信道下的译码性能,对RM采用大数逻辑译码算法
  4. Android Studio 设置编辑器背景颜色
  5. Java笔记-使用RabbitMQ的Java接口实现Fair dispatch(公平分发)
  6. CloudStack 配置高级网络简明手册
  7. ARToolKit从图片生成特征点数据
  8. 高中电子技术——二极管的类型和作用
  9. NOI2019游记 —— 夏花般绚烂,繁星般璀璨
  10. 从金钱社会向财富第三极的过渡方案
  11. stm32g474芯片手册_STM32芯片资料-STM32F4 选型手册.pdf
  12. 20220513-rk3568编译linux4.19的buildroot-2(kernel)
  13. 转载-如果你不熟悉Material Design,请一口吃下这篇干货!
  14. CHROME插件开发之·web页面与插件后台通信(chrome.runtime.sendMessage => chrome.runtime.onMessageExternal.addListener)
  15. 关于IP地址、网络号、主机号、子网掩码之间的关系
  16. 关于领域驱动设计(DDD)的理论知识
  17. 未来拟投10亿!保乐力加峨眉山威士忌酒厂正式揭幕;欧舒丹收购美国护理品牌约83%间接股权 | 美通社头条...
  18. OpenJudge NOI题库 1.7 编程基础之字符串
  19. 轻松高效搭建可视化数据网站
  20. MySQL8.0.11修改root密码

热门文章

  1. [转] linux操作系统下c语言编程入门--基础知识
  2. 我们应该如何去了解JavaScript引擎的工作原理
  3. JQuery获取和设置Select选项常用方法总结 (转)
  4. [推荐]网店代销的卖家,你的宝贝名称修改了吗?
  5. 启动Tomcat 出现java.net.BindException:Address already in use:JVM_Bind
  6. 极性大小判断技巧_别愣着了,来分析分析正极性半波整流电路!
  7. 拓端tecdat|Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据
  8. 拓端tecdat|R语言ggmap空间可视化机动车交通事故地图
  9. 拓端tecdat|R语言使用 LOWESS技术图分析逻辑回归中的函数形式
  10. 拓端tecdat|R语言生存分析可视化分析