如图是产品需求 需要构造如图的K线走势(图上部分) 和 交易量(图下部分)
第一次遇到这样的需求,公司人不多,赶进度,不扯虚的,在一顿搜索之后。。。
GitHub上搜了很多Chart,和Stock的demo 一顿学习和修改,找到了一个差不多的项目,https://github.com/AndroidJiang/StockChart,在此感谢博主,节省了很多时间。
在clone这个项目之后,基本的结构已经差不多了,我们需要做的是修改UI和填充tradingview网页版的数据。
1 修改K线的UI 加入以下代码即可:
candleDataSet.setDecreasingColor(Color.parseColor(“#00c882”));//下跌矩形的颜色
candleDataSet.setIncreasingPaintStyle(Paint.Style.FILL);//是否是实线
candleDataSet.setIncreasingColor(Color.parseColor(“#e86e42”));//增长矩形的颜色
candleDataSet.setShadowColorSameAsCandle(true);//矩形两端的线是否和矩形颜色相同
2 修改下方成交量的UI
找到BarChartRenderer.java文件
找到作者留下的修改颜色的注释,加入自己的逻辑代码和色值,为了保证触发这段代码,需要在barDataSet里添加如下代码
List listColor=new ArrayList<>();
listColor.add(Color.parseColor(“#00c882”));
listColor.add(Color.parseColor(“#e86e42”));
barDataSet.setColors(listColor);
3 获取和填充网页端的数据
代码如下:
省略网络请求的部分。
public void parseKLine2(JSONObject obj) {
ArrayList kLineBeans = new ArrayList<>();
JSONArray mTimeArray = obj.optJSONArray("t");
if (mTimeArray != null) {
kDatas.clear();
int count = mTimeArray.length();
JSONArray mHighArray = obj.optJSONArray("h");
JSONArray mLowArray = obj.optJSONArray("l");
JSONArray mOpenArray = obj.optJSONArray("o");
JSONArray mCloseArray = obj.optJSONArray("c");
JSONArray mVolumeArray = obj.optJSONArray("v");
for (int i = 0; i < count; i++) {
KLineBean kLineData = new KLineBean();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
kLineData.date = sdf.format( new Date(((int)mTimeArray.opt(i) * 1000)));
kLineData.open = Float.parseFloat(mOpenArray.opt(i) + "");
kLineData.close = Float.parseFloat(mCloseArray.opt(i) + "");
kLineData.high = Float.parseFloat(mHighArray.opt(i) + "");
kLineData.low = Float.parseFloat(mLowArray.opt(i) + "");
kLineData.vol = Float.parseFloat(mVolumeArray.opt(i) + "");
kLineBeans.add(kLineData);
volmax = Math.max(kLineData.vol, volmax);
xValuesLabel.put(i, kLineData.date);
}
}
kDatas.addAll(kLineBeans);
}
效果图如下:
现在这样已经基本差不多了,可以在这个的基础上再进行细微的改动,记录下。
微信号:CL499685132 欢迎一起交流