仿火币app tradingview数据移植到安卓客户端

特斯比特 2021-11-17 10:48:42

需求图片

如图是产品需求 需要构造如图的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&#61;new ArrayList<>();
listColor.add(Color.parseColor(“#00c882”));
listColor.add(Color.parseColor(“#e86e42”));
barDataSet.setColors(listColor);

3 获取和填充网页端的数据
代码如下&#xff1a;
省略网络请求的部分。
public void parseKLine2(JSONObject obj) {

    ArrayList<KLineBean> kLineBeans &#61; new ArrayList<>();
    JSONArray mTimeArray &#61; obj.optJSONArray(&#34;t&#34;);
    if (mTimeArray !&#61; null) {
        kDatas.clear();
        int count &#61; mTimeArray.length();
        JSONArray mHighArray &#61; obj.optJSONArray(&#34;h&#34;);
        JSONArray mLowArray &#61; obj.optJSONArray(&#34;l&#34;);
        JSONArray mOpenArray &#61; obj.optJSONArray(&#34;o&#34;);
        JSONArray mCloseArray &#61; obj.optJSONArray(&#34;c&#34;);
        JSONArray mVolumeArray &#61; obj.optJSONArray(&#34;v&#34;);
        for (int i &#61; 0; i < count; i&#43;&#43;) {
            KLineBean kLineData &#61; new KLineBean();
            SimpleDateFormat sdf &#61; new SimpleDateFormat(&#34;MM-dd HH:mm&#34;);
            kLineData.date &#61; sdf.format( new Date(((int)mTimeArray.opt(i) * 1000)));
            kLineData.open &#61; Float.parseFloat(mOpenArray.opt(i) &#43; &#34;&#34;);
            kLineData.close &#61; Float.parseFloat(mCloseArray.opt(i) &#43; &#34;&#34;);
            kLineData.high &#61; Float.parseFloat(mHighArray.opt(i) &#43; &#34;&#34;);
            kLineData.low &#61; Float.parseFloat(mLowArray.opt(i) &#43; &#34;&#34;);
            kLineData.vol &#61; Float.parseFloat(mVolumeArray.opt(i) &#43; &#34;&#34;);
            kLineBeans.add(kLineData);
            volmax &#61; Math.max(kLineData.vol, volmax);
            xValuesLabel.put(i, kLineData.date);
        }
    }
    kDatas.addAll(kLineBeans);
}

效果图如下&#xff1a;

这里写图片描述

现在这样已经基本差不多了&#xff0c;可以在这个的基础上再进行细微的改动&#xff0c;记录下。

声明:本文内容不代表斑马投诉网站观点,内容仅供参考,不构成投资建议。投资有风险,选择需谨慎! 如涉及内容、版权等问题,请联系我们,我们会在第一时间作出调整!

相关文章