fujianlian / KLineChart

Android仿火币K线图实现(包含MA,BOLL,MACD,KDJ,RSI,WR指标)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

选择boll线的时候,如果K线某一条数据的值比较低的情况下,会出现主图的K线向下到附图上去,能咨询下修改的思路吗?

tqlmorepassion opened this issue · comments

commented

控制max和min值之后,K线不会下去,但是boll线会下去,绘制boll线的值又不能修改,是否还是得从每个K线柱子来下手?改动是不是特别大啊。

老哥, 这个问题你解决了吗?

commented

@whyalwaysmea BaseKLineChartViewBase 我在这里getMainY方法限制了最大最小高度,但是实际上并不是特别好哈,因为其实全局的缩放比例是靠这个控制的,如果出现插针的情况下,不会按照作者最开始的设计思路去按比例缩放,但是实际上不是特别影响使用,你可以参考。

public float getMainY(float value) {
return Math.min((mMainMaxValue - value) * mMainScaleY, mMainRect.height()) + mMainRect.top;
}

commented

@whyalwaysmea 兄弟,你也是成都啊。搞区块链的吗?

@tqlmorepassion 谢谢,我先试试看能解决我的情况不。 对啊,成都的,一个数字货币的项目,你也是成都的哇? 有时间多交流哈呢?

控制max和min值之后,K线不会下去,但是boll线会下去,绘制boll线的值又不能修改,是否还是得从每个K线柱子来下手?改动是不是特别大啊。

你在绘制MA,EMA,BOLL线的时候和 BaseKline里面的mMainMinValue 价格做个对比 比最低价格低就不要绘制了

Math.min((mMainMaxValue - value) * mMainScaleY, mMainRect.height()) + mMainRect.top;

这样限制的话,底部会是一个平行线。或者超过范围不进行绘制。然后左右滑动的时候回重新进行计算

可以在MainDraw.java这个类中的getMaxValue进行限制
@OverRide
public float getMaxValue(ICandle point) {
if (status == Status.BOLL) {
return Math.max(point.getUp(), point.getHighPrice());
} else {
return Math.max(point.getHighPrice(), point.getMA30Price());
}
}

相同的方式,getMinValue方法也进行最小的数据限制。是可以解决绘制出范围的问题

Hello,可以这样解决:
1.先找到DataHelper类;
2.类中找到calculateMA方法,

int[] maKeys=new int[]{5,10,30}; //要计算的几日均线

改为以下代码:

int[] maKeys=new int[]{5,10,20,30}; //要计算的几日均线

3.类中找到setMAPrice方法,

if(maxCount == 30) {
            kLineEntity.MA30Price = ma;
        }

改为以下代码:

if (maxCount == 30) {
            kLineEntity.MA30Price = ma;
        } else if(maxCount == 20) {
            kLineEntity.MA20Price = ma;
        }

OK,这样试试看,应该可以