# KLine
**Repository Path**: nickyou/kline
## Basic Information
- **Project Name**: KLine
- **Description**: kotlin实现仿同花顺交易K线图,分时图,成交量,均线图
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2026-01-14
- **Last Updated**: 2026-01-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
这是一款使用kotlin语言开发的股票K线走势行情图,效果如下:
项目中使用到的相关技术
1.自定义View(这里的方式是使用canvas绘图的方式,包含drawPath,drawRectF,drawText.drawBitmap等等)
2.使用GestureDetector实现用户手势检测,项目使用到的手势分别为点击(onSingleTapUp),长按(onLongPress),滑动(onScroll),长按后滑动(MotionEvent.ACTION_MASK)
缩放(MotionEvent.ACTION_MASK 判断event.pointerCount == 2)
3.onTouch事件传递,本项目包含三个自定义的View,KLineViewGroup(父布局),KLineView(子View,K线图),VolumeView(子View,成交量图),MinuteLineView(子View,分时图)
项目使用了最简单的方式,集中在父View监听onTouch事件,然后根据需要传递到子View并交给子类具体实现。
4.K线数据的指标计算和绘制位置计算(这个不是项目的技术关键,虽然有些算起来头大)
5.使用handler+Runnable进行事件分发和取消(postDelayed,removeCallbacks)
6.DataBinding数据绑定
7.用户交互,所有的交互方式均与同花顺APP一样
交互如下
v1:用户点击K线后,绘制十字线焦点。若五秒后无其他操作,自动释放焦点,若期间再次点击,则立即取消焦点
v2:用户滑动K线,实时刷新K线数据
v3:用户长按或长按后滑动K线,实时绘制选中K线涨跌情况
v4:用户点击选中K线后,点击分时图区域,弹出股票分时走势图(包含价格走势和成交量走势)
v5:分时图模式下,选中当前分时图对应的K线(绘制虚线表示)
v6:分时图模式下滑动,手抬起时绘制抬起时对应的K线走势图
v7:关闭分时图,K线重置
8.后续还会继续增加其他功能项
部分实现代码
//使用模拟数据(解析asset数据),数据准备完毕后回调
private val onReadyListener: IChartDataCountListener> =
IChartDataCountListener{ data, extremeValue ->
mBinding.klineGroup.setData(data, extremeValue) //设置数据源
mBinding.klineGroup.dispatchDrawData() //分发子类分别绘制
mBinding.kLineData = data[data.size - 1] //DataBinding数据绑定
}
//手势滑动
override fun onChartTranslate(me: MotionEvent?, dX: Float) {
mHelper.initKLineDrawData(dX, KLineSourceHelper.SourceType.MOVE)
}
//手势缩放
override fun onChartTranslate(dX: Float) {
mHelper.initKLineDrawData(dX, KLineDataHelper.SourceType.MOVE)
}
//长按
override fun onLongPress(drawItem: KLineDrawItem) {
mBinding.kLineData = drawItem
}