手把手教你画AndroidK线分时图及指标


         先废话一下:来到公司之前,项目是由外包公司做的,面试初,没有接触过分时图k线这块,觉得好难,我能搞定不!但是一段时间之后,发现之前做的那是一片稀烂,但是这货是主功能啊,迟早的自己操刀,痛下决心,开搞,本想用开源控件,但是想自己实现一下:接着有了本文

          开始用surfaceview,但是这货在上下滑动的时候会出现黑边,这个问题我也是纠结了好久,想想产品肯定会打回,打回了还丢脸,算了没多少东西就用view吧,废话真tm多,开始吧。

         1,创建项目(Android studio)

         2,对了,先上个效果图吧,节省各位的时间:

        3,把Activity设置为横屏,不设置也无所谓,我觉得横屏的好看点

      android:screenOrientation="landscape"

         4,建俩基类分时图点数据和K线每点的数据,备注的很清楚了

/**
 * 分时所需要的 数据字段
 */
public class CMinute {
	//时间
	public long time;
	//最新价
	public double price;
	//交易量
	public long count;
	//均价
	public double average ;
	//涨跌幅
	public double rate ;
	//价格
	public double money ;
	public long getTime() {
		return time;
	}

	public String getTimeStr() {
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
		try {
			return sdf.format(new Date(time * 1000));
		} catch (Exception e) {
			return "--:--";
		}
	}
}

public class StickData implements Parcelable {

    //时间
    private long time;
    //开盘
    private double open;
    //收盘
    private double close;
    //最高
    private double high;
    //最低
    private double low;
    //量
    private long count;
    //昨收
    private double last;
    //涨跌幅
    private double rate;
    //价格
    private double money;
    //计算均线的零时保存的值
    private double maValue;
    //5段均线
    private double sma5;
    //10段均线
    private double sma10;
    //20段均线
    private double sma20;
    //量5段均线
    private double countSma5;
    //量10段均线
    private double countSma10;
    //MACD的三个参数
    private double dif;//线
    private double dea;//线
    private double macd;//柱状
    //KDJ的三根线
    private double k;
    private double d;
    private double j;
    //计算K时需要
    private double rsv;
    //K线资金
    //超大单净值
    private double sp;
    //大单净值
    private double bg;
    //中单净值
    private double md;
    //小单净值
    private double sm;
    

5,画图的步骤

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //1,初始化需要的数据
        initWidthAndHeight();
        //2,画网格
        drawGrid(canvas);
        //3,画线(分时线的价格线、均价线或K线的均线)
        drawLines(canvas);
        if(lineType != TYPE_FENSHI) {
            //4,如果是K线另外画烛形图
            drawCandles(canvas);
        }
        //5,写上XY轴的文字(写早了会被覆盖)
        drawText(canvas);
        //6,画需要显示的指标
        switch (indexType) {
            case INDEX_VOL:
                drawVOL(canvas);
                break;
            case INDEX_ZJ:
                drawZJ(canvas);
                break;
            case INDEX_MACD:
                drawMACD(canvas);
                break;
            case INDEX_KDJ:
                drawKDJ(canvas);
                break;
        }
    }

6,画图实现

其实分时线就是画线,烛形图也是画线,但是多画个矩形而已,要是分析成这样的话,就简单学多了,那么接下来我来教你画线画矩形。。。。

此处省略10000字,好了说完了(其实是不用说了,就那么俩方法drawLine,drawRect),接下来我们重点说说位置的计算:

    我们实际拿到的数据,不可能直接展示到坐标系的,因为可能很大很小,先来说说Y轴吧

  

Y轴

    y = height - input * height / (max - min);

     y:计算结果

     height:view高度

     max:显示的一组数据最大值

     min:显示的一组数据中最小值

            展示分时线时,需要在均价和价格取出最大值和最小值

 

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值