借鉴开源项目,重写K线,优化性能
-
继承KlineEntry实现Bean类,复写对应方法返回 高 开 低 收 量 时间
public class KChartBean extends KLineEntity { @Override public Long getDate() { try { return new SimpleDateFormat("yyy/MM/dd").parse(date).getTime(); } catch (ParseException e) { e.printStackTrace(); return 0L; } } @Override public float getOpenPrice() { return open; } @Override public float getHighPrice() { return high; } @Override public float getLowPrice() { return low; } @Override public float getClosePrice() { return close; } @Override public float getVolume() { return volume; } ...... }
-
在布局中直接使用
<com.icechao.klinelib.view.KLineChartView android:id="@+id/kLineChartView" android:layout_width="match_parent" android:layout_height="580dp" android:background="@color/color_081734" /> 支持自定义属性 自定义属性查看:
名称 值 属性 备注 kline_main_lengend_margin_top
dimension 主视图Lengend上边距 kline_logo
resource 主视图logo kline_candle_right_padding
dimension 主视图与右侧内边距 kline_increase_color
color 涨颜色 kline_background_color
color 背景色 kline_decrease_color
color 跌颜色 kline_text_size
dimension 文字大小 kline_text_color
color 文字颜色 kline_line_width
dimension 指标线线宽 kline_kline_item_width
dimension 蜡烛图加外围空隙宽 kline_candle_width
dimension 蜡烛图柱宽 kline_candle_line_width
dimension K线空心时宽度 kline_price_line_width
dimension 价格线宽 kline_price_line_color
color 价格线颜色 kline_price_line_right_color
color 价格只显示在右侧时颜色 kline_price_line_box_color
color 当前价格背景色 kline_background_fill_top_color
color 背景渐变上部颜色 kline_background_fill_bottom_color
color 背景渐变下部颜色 kline_background_alpha
integer 背景色透明度 kline_background_fill_alpha
integer 背景色填充透明度 kline_time_line_color
color 分时线颜色 kline_time_line_fill_top_color
color 分时线填充渐变上部颜色 kline_time_line_fill_bottom_color
color 背景色渐变下部颜色 kline_time_line_end_point_color
color 分时线尾颜色 kline_time_line_end_multiply
int 分时线尾圆变化最大倍数 kline_time_line_end_radiu
dimension 分时线尾圆半径 kline_candle_solid
boolean K线是否空心 false kline_grid_line_width
dimension 网格线宽 kline_grid_line_color
color 网格颜色 kline_select_x_line_width
dimension 十字线X轴线宽 kline_select_y_line_width
dimension 十字线Y轴线宽 kline_select_x_line_color
color 选择线X线颜色 kline_select_y_line_color
color 选择线Y线颜色 kline_select_y_color
color 选择线Y渐变色,Y线最好半透明透明 kline_select_cross_big_color
color 选择线相交点圆颜色 kline_select_cross_color
color 选择线相交点颜色 kline_select_price_box_background_color
color 先中价格框背景色 kline_select_background_color
color 选择框背景色 kline_select_price_box_horizental_padding
dimension 选择后价格框的横向padding,三角形的高为横+纵padding kline_select_price_box_vertical_padding
dimension 选择后价格框的纵向向padding,三角形的高为横+纵padding kline_select_info_box_margin
dimension 选中弹出框的margin kline_select_info_box_padding
dimension 选中行弹出行情图的padding,上下为此值*2 kline_select_text_size
dimension 选择框文字大小 kline_macd_increase_color
color macd标准线上柱颜色 kline_macd_decrease_color
color macd标准线下柱颜色 kline_macd_width
dimension macd线宽度 kline_dif_color
color dif线颜色 kline_dea_color
color dea线颜色 kline_macd_color
color macd线颜色 kline_k_color
color k线的颜色 kline_d_color
color d线的颜色 kline_j_color
color j线的颜色 kline_rsi1_color
color 第1根rsi线的颜色 kline_rsi2_color
color 第2根rsi线的颜色 暂无 kline_ris3_color
color 第3根rsi线的颜色 暂无 kline_up_color
color up线颜色 kline_mb_color
color mb线颜色 kline_dn_color
color dn线颜色 kline_wr_1_color
color 第1根wr线的颜色 kline_wr_2_color
color 第2根wr线的颜色 暂无 kline_wr_3_color
color 第3根wr线的颜色 暂无 kline_ma_one_color
color 第1根ma线的颜色 kline_ma_two_color
color 第2根ma线的颜色 kline_ma_three_color
color 第3根ma线的颜色 kline_vol_lengend_color
color 成交量图例颜色 kline_vol_lengend_margin_top
dimension 成交量图例距离成交量顶部距离 0 -
初始化k线
private void initKline() { //设置K线的数据适配器 chartView.setAdapter(new KLineChartAdapter()); //设置X轴时间格式化对象,根据不同波段可以重新设置 chartView.setDateTimeFormatter(new DateFormatter()); //背景网络列 chartView.setGridColumns(5); //背景网络行 chartView.setGridRows(5); //设置Y轴值格式化对象,默认保留两位小数 chartView.setValueFormatter(new ValueFormatter() { @Override public String format(float value) { return String.format("%.2f", value); } }); //设置交易量格式化对象,默认保留两位小数 chartView.getVolDraw().setValueFormatter(new ValueFormatter() { @Override public String format(float value) { return String.format("%.2f", value); } }); //设置K线左侧滑动的超出距离 chartView.setOverScrollRange(getWindowManager().getDefaultDisplay().getWidth() / 5); //显示loading chartView.showLoading(); }
4.使用KLineChartAdapter设置数据
如果没有将数据适配器保存可以通过ChartView的getAdapter方法获取
chartView.getAdapter()
填充或重新填充数据
resetData(List<KlineEntry>);
尾部追加数据
addLast(KlineEntry);
修改某个数据
changeItem(KlineEntry);
如果有需要在前面追加多个数据可以继承KLineChartAdapter自定义方法参考addLast方法
查看全部API点击这里KLineChartView或加QQ群咨询
kLineChartView.justShowLoading() ;
只显示loading不会显示后面的K线,K线部队只显示背景
kLineChartView.showLoading();
显示loading的同时显示K线
kLineChartView.changeMainDrawType(Status.MainStatus.MA);
参数
Status.MainStatus.MA, : 显示ma 默认值
Status.MainStatus.BOLL: 显示boll
Status.MainStatus.NONE: 只显示CandleLine
kLineChartView.setChildDraw(Status.ChildStatus.MACD);
参数
Status.ChildStatus.NONE : //不显示子图 默认值
Status.ChildStatus.MACD : macd
Status.ChildStatus. KDJ : kdj
Status.ChildStatus.RSI : rsi
Status.ChildStatus.WR : wr
kLineChartView.setBetterX(boolean betterX);
参数
true : X轴最左边和最右边label会向中间缩进显示保证label全部显示在屏幕内 默认值
false: 显示为X轴最左边和最右边label会以与对方的坐标点中间对齐的方式显示
chartView.setKlineState(Status.KlineStatus klineStatus);
参数
Status.KlineStatus.K_LINE : 显示K线
Status.KlineStatus.TIME_LINE : 显示为分时线
kLineChartView.setCrossFollowTouch(boolean crossFollowTouch) ;
参数
true : 跟随手指
false: 显示为收盘价 默认值
kLineChartView.setAnimLoadData(boolean withAnim);
参数
true : 执行加载数据动画 默认值
false: 不执行加载数据动画
kLineChartView.setKlineRightPadding(float klineRightPadding);
参数
float : 内边距
kLineChartView.setSelectedTouchModle(Status.ShowCrossModle showCrossModle);
参数
Status.ShowCrossModle.SELECT_TOUCHE : 点击显示
Status.ShowCrossModle.SELECT_PRESS : 长按显示
Status.ShowCrossModle.SELECT_BOTH : 点击长按混合
kLineChartView.setLogoBigmap(Bitmap bitmap);
参数
Bitmap : 图片Bitmap 可以设置好大后传入
kLineChartView.setLogoResouce(int bitmapRes);
参数
bitmapRes : 资源id 原大小显示
kLineChartView.setLogoAlpha(int alpha);
参数
alpha : 0-255 logo画笔透明度
kLineChartView.setLogoLeftTop(float left, float top);
参数
left : logo的左侧坐标,相对KlineChartView
top : logo的顶部坐标,相对KlineChartView
kLineChartView.setSlidListener(SlidListener slidListener);
参数
slidListener : SlidListener对象 监听滑动到最左和最右
kLineChartView.setResetTranslate();
kLineChartView.setOverScrollRange(float overScrollRange);
参数
overScrollRange : 滑动距离
- 重写分时线绘制
- 重写十字线绘制
- 重写选中的绘制
- 重写网格的绘制
- 重写背景网格绘制
- 重写Y轴label的绘制
- 重写十字线纵线的绘制
- 重写CandleLine绘制
- 重写成交量柱状图的绘制
- 重写数据计算
- 重写滑动计算
- 重写放大计算
- 重写选中框的计算
- 重写指标线的算法
- 重写当前页面K线数目的计算
- 添加深度图
- 添加设置logo
- 添加k线与右侧间距
- 添加十字线选中模式
- 添加当前价格的时间线
- 添加分时线尾呼吸灯效果
- 添加追加尾部数据的方法
- 添加时间和值的动态格式化
- 添加K线数据变化时动画效果
- 添加加载数据的动画执行开关
- 添加最新价格和屏幕右侧指示线
- 添加十字线模式开关(选中Y值跟随手指或指向最新价)
- 添加LoadingView设置(可以自定义View并自定义动画)
- 添加X轴左右坐标显示模式开关(相对坐标点居中,屏幕内 默认屏幕内显示)
- 删除加载更多逻辑(重置设置数据不需要加载更多)
后面复用历史数据会导致K线看起来有点乱,数据问题