Android仿余额宝实现七天年化收益率图表

先看效果图
这里写图片描述
接着是源码下载地址

本来是使用MPAndroidChartLib,但是有一个业务上的bug,后来就想着自己练练手自己写一个。
因为以前没有真正自定义过涉及到onDraw()的控件,所以目前来看,这个控件的可扩展性还是很差的,留作以后有时间再做吧,主要就是抽象出来一些操作来实现其他样式或者功能的操作。
水平有限,在此只是帮助一些初学者提供一些思路上的帮助吧
这个View没什么复杂的地方,就是比较麻烦,主要流程有:
1、先画出表格中X轴和Y轴和表格里的虚线;
2、计算Y轴的刻度
3、遍历传入的数据列表绘制各个点的位置到Path中,数据线和阴影区域的区别就是:线只需要画到最后一个点就行了,而阴影则需要添加两个点,形成闭合区域。
4、动画的实现。
5、手势操作。

View的具体实现步骤和方法:

自定义属性(如果需要)

定义一个同名的declare-styleable。

<declare-styleable name="CashChart">
    <attr name="line_color" format="color"/>
    <attr name="shadow_color" format="color"/>
    <attr name="y_axis_rows" format="integer"/>
</declare-styleable>

获取自定义属性

public CashChart(Context context) {
this(context, null);
}

public CashChart(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public CashChart(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.mContext = context;
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CashChart);
    mLineColor = ta.getColor(R.styleable.CashChart_line_color, LINE_COLOR_DEFAULT);
    mShadowColor = ta.getColor(R.styleable.CashChart_shadow_color, SHADOW_COLOR_DEFAULT);
    mLineWidth = ta.getDimension(R.styleable.CashChart_line_width, LINE_WIDTH_DEFAULT);
    mYAxisRows = ta.getInteger(R.styleable.CashChart_y_axis_rows, CHART_Y_AXIS_ROWS_DEFAULT);
    ta.recycle();
    init();
}

接着在init()方法中,初始化各种UI值、Paint、动画,在这里我为每个操作都定义了一个的画笔。动画后面再说。
接着有一个setData(List< ChartBean > data)方法,在设置后,计算出来最大最小值和差值,

private Paint mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);//画线用的
private Paint mLineEffectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//画虚线用的
private Paint mChartScaleTxtPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//表格刻度文本
private Paint mCurPointPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//选中的点
private Paint mBubbleTxtPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//选中的点的文本Paint
private Paint mShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//阴影区域的画笔

public void setData(List<ChartBean> data) {
    if (data == null) return;
    this.mDatas = data;
    //找出数据列表中最大值和最小值,来确定表格Y轴上的数值
    float[] values = new float[mDatas.size()];
    for (int i = 0; i < mDatas.size(); i++) {
        if (mDatas.get(i) == null) continue;
        values[i] = mDatas.get(i).getValue();
    }
    // 这里使用了冒泡算法
    float[] sortValues = bubbleSort(values);
    mMin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值