本章节继缩放功能之后,绘制底部Attached Chart图表,添加了MADC, KDJ。并且实现了点击底部Attached Chart 部分区域,自动切换底部图表绘制功能,同时实现在 Attached Chart 上描述文案处点击底部弹出PoupWindow 供底部图表类型选择功能,两个功能点的实现相对上次的缩放都比较简单。(MACD的两条线数据Mock的不好看没画出来了)
gif动效图如下:
1. 底部区域点击接口Export
为了不影响之前的功能代码,扩展了一个新的接口给UI层
interface OnStockItemGestureListener<T : RecyclerBarEntry?> : OnItemGestureListener<T> {
fun onStockItemBottomClick(view: View)
fun showBottomPopWindow()
}
然后重新弄了一个中间层的接口Adapter, Fragment 内实现接口方法
open class SimpleStockItemGestureListener: OnStockItemGestureListener<RecyclerBarEntry?> {
override fun onItemClick(view: View, position: Int) {}
override fun onLongItemClick(view: View, position: Int) {}
override fun onItemSelected(barEntry: RecyclerBarEntry?, position: Int) {}
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {}
override fun onStockItemBottomClick(view: View){}
override fun showBottomPopWindow(){}
}
//KLineDayFragment 实现
override fun onStockItemBottomClick(view: View) {
mBarChartAttrs.attachedType = AttachedChartType.proceedType(mBarChartAttrs.attachedType)
resetYAxis(recyclerView)
mBarChartAdapter.notifyDataSetChanged()
}
override fun showBottomPopWindow() {
Log.d(TAG, "show hello ketiy2.")
showPopupWindow()
}
在RecyclerStockItemGestureListener 内部对点击区域进行区分
private fun setListener() {
mItemGestureListener = RecyclerStockItemGestureListener<RecyclerBarEntry>(activity, recyclerView, stockItemGestureListener)
recyclerView.addOnItemTouchListener(mItemGestureListener)
}
这里只对单击效果进行处理,具体根据 MotionEvent中的y值进行区分,
override fun onSingleTapUp(e: MotionEvent): Boolean {
val x = e.x
val y = e.y
val descTop = recyclerView.bottom - recyclerView.paddingBottom
- recyclerView.mAttrs.contentPaddingBottom
val descBottom = descTop + (recyclerView.mAttrs as StockChartAttrs).mAttachedDescHeight
val child = recyclerView.findChildViewUnder(x, y)
return if (y > descTop && y <= descBottom) {
onAttacheDescClick()// 弹底部的PoupWindow
} else if (y > descBottom) {
onAttacheChartClick(child)// 底部AttacheChart点击自动切换
} else {
onMainChartClick(child, x)// 原有逻辑,Main Chart部分点击效果
}
}
2. AttachedChart 的绘制
依旧在 StockChartRenderer 中的绘制方法内进行新增图表的绘制。
所有底部Chart的绘制放在了drawAttachedChart() 方法内,目前只加了三种,后续扩展非常方便
MADC、KDJ、Volume三个具体图表的绘制
至此,K线绘制的绝大部分功能已经完成,后续只是举一反三的添加相同的绘制逻辑,或是一些5日、周、月的UI实现,还有分时图相比而言比较简单,还没有缩放功能。
所以暂时先告一段落,后续代码整理一下后放GitHub链接出来。