基于RecyclerChart的KLine的绘制(五)

841 阅读2分钟

本章节继缩放功能之后,绘制底部Attached Chart图表,添加了MADC, KDJ。并且实现了点击底部Attached Chart 部分区域,自动切换底部图表绘制功能,同时实现在 Attached Chart 上描述文案处点击底部弹出PoupWindow 供底部图表类型选择功能,两个功能点的实现相对上次的缩放都比较简单。(MACD的两条线数据Mock的不好看没画出来了)

gif动效图如下:

Kline_AttachedChart_AdobeExpress (1).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 中的绘制方法内进行新增图表的绘制。

1.png

所有底部Chart的绘制放在了drawAttachedChart() 方法内,目前只加了三种,后续扩展非常方便

2.png

MADC、KDJ、Volume三个具体图表的绘制

3.png

至此,K线绘制的绝大部分功能已经完成,后续只是举一反三的添加相同的绘制逻辑,或是一些5日、周、月的UI实现,还有分时图相比而言比较简单,还没有缩放功能。

所以暂时先告一段落,后续代码整理一下后放GitHub链接出来。