博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
收益曲线图
阅读量:4537 次
发布时间:2019-06-08

本文共 6624 字,大约阅读时间需要 22 分钟。

收益曲线图

布局:

 

 

MainActivity:

 

public class MainActivity extends Activity {    private AnnualyieIdView annualyieldView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        annualyieldView=(AnnualyieIdView) findViewById(R.id.line);        initdata();    }    private void initdata() {        List
yline=new ArrayList
(); yline.add(2.4f); yline.add(2.44f); yline.add(2.45f); yline.add(2.45f); yline.add(2.44f); yline.add(2.44f); yline.add(2.43f); annualyieldView.setDataY(yline); }}

 

Math:
public class Math {    public static float initData(float a){        if (2.40f<=a&&a<2.41f) {            a=540f-540f/(a/0.01f);        }else if(2.41f<=a&&a<2.42f){            a=480f-480f/(a/0.01f);        }else if (2.42f<=a&&a<2.43f) {            a=360f-360f/(a/0.01f);        }else if (2.43f<=a&&a<2.44f) {            a=270f-270f/(a/0.01f);        }else if (2.44f<=a&&a<2.45f) {            a=180f-180f/(a/0.01f);        }else if (2.45f<=a&&a<2.46f) {            a=90f-90f/(a/0.01f);        }        return a;    }}
 
AnnualyieIdView:
public class AnnualyieIdView extends View{    private Paint mTextPaint, mLinePaint,mPathPaint,mPointPaint;    //柱状图的宽度    private float mPaintRectWidth;    //路径    private Path mPath;    //高跟宽    private float mWidth, mHeight;    //柱状图的数量    private final float mCount = 6;    //偏移量    private final float offsets=1;    private float mRectHeight;    //x轴的坐标    private List
xline=new ArrayList
(); //Y轴的坐标 private List
yline=new ArrayList
(); //左边文字 private float []x={2.46f,2.45f,2.44f,2.43f,2.42f,2.41f,2.40f}; //底部文字 private String [] day={"07-01","07-02","07-03","07-04","07-05","07-06","07-07"}; public AnnualyieIdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } public AnnualyieIdView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public AnnualyieIdView(Context context) { super(context); initView(); } private void initView() { //绘制线和文字的颜色 mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setColor(Color.parseColor("#cccccc")); mTextPaint.setTextSize(25); mTextPaint.setStrokeWidth(1); //绘制折线图的点 mPointPaint= new Paint(); mPointPaint.setAntiAlias(true); mPointPaint.setColor(Color.parseColor("#000000")); mPointPaint.setTextSize(25); mPointPaint.setStrokeWidth(5); //绘制柱状图的画笔 mLinePaint = new Paint(); mLinePaint.setAntiAlias(true); //绘制折线图的画笔 mPathPaint= new Paint(); mPathPaint.setAntiAlias(true); mPathPaint.setColor(Color.parseColor("#ff0000")); mPathPaint.setStyle(Paint.Style.STROKE); //折线图的路径 mPath=new Path(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth=(float)(getWidth()-getWidth()*0.1); mHeight=(float)(getHeight()-getHeight()*0.1); mRectHeight=(float)(getHeight()-getHeight()*0.1); mPaintRectWidth=(float) (mWidth*0.8/mCount); mLinePaint.setStrokeWidth(mPaintRectWidth); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); onDrawRect(canvas); onDrawLine(canvas); canvasPath(canvas); } //绘制6个矩形 private void onDrawRect(Canvas canvas) { for (int i = 0; i < 7; i++) { if (i%2==0) { mLinePaint.setColor(Color.parseColor("#eeeeee")); }else { mLinePaint.setColor(Color.parseColor("#ece1f3")); } float left =(float) (mWidth * 0.4 / 2 + mPaintRectWidth * i + offsets); float right=(float) (mWidth * 0.4 / 2 + mPaintRectWidth* (i + 1)); canvas.drawRect(left,(float)(mRectHeight*0.01),right, mHeight, mLinePaint); } } //绘制网格线 private void onDrawLine(Canvas canvas){ //第一条线 canvas.drawLine(mPaintRectWidth-mPaintRectWidth/2, (float)(mRectHeight*0.01), getWidth(), (float)(mRectHeight*0.01), mTextPaint); //定义这里高度 float height; //横七条 for (float i = 0; i < 7; i++) { //从上到下 if (i==0) { height=i; }else { height=mRectHeight*(i/6); float size=mTextPaint.measureText(x[(int)i]+""); //绘制线 canvas.drawLine(mPaintRectWidth+mPaintRectWidth/2, height, getWidth(), height, mTextPaint); //绘制左边Y轴的文字 canvas.drawText(x[(int)i]+"", (float)(mPaintRectWidth-mPaintRectWidth*0.35), height+size/5, mTextPaint); } } //竖七条 canvas.drawLine((float) (mPaintRectWidth-mPaintRectWidth/2),0, (float) (mPaintRectWidth-mPaintRectWidth/2), mHeight, mTextPaint); for (float i = 0; i < 7; i++) { //从左到右 canvas.drawLine((float) (mWidth * 0.4 / 2 + mPaintRectWidth * i),0, (float) (mWidth * 0.4 / 2 + mPaintRectWidth * i), mHeight, mTextPaint); //绘制底边的日期文字 canvas.drawText(day[(int) i], (float) (mWidth * 0.34 / 2 + mPaintRectWidth * i), (float)(mHeight+mHeight*0.1), mTextPaint); //准备好下面折线图的X轴坐标 xline.add((float) (mWidth * 0.4 / 2 + mPaintRectWidth * i)); } //折线图的第一个点 xline.add((float) (mPaintRectWidth-mPaintRectWidth/2)); } //绘制折线路径 public void canvasPath(Canvas canvas){ for (int j = 0; j < yline.size(); j++) { float x=xline.get(j); float y =yline.get(j); float aftery=Math.initData(y); if (j==0) { mPath.moveTo(x,aftery ); }else{ mPath.lineTo(x,aftery ); } canvas.drawPoint(x, aftery, mPointPaint); float size=mPointPaint.measureText(y+""); canvas.drawText(y+"", (float)(x-size/2), (float)(aftery+size*0.25), mPointPaint); } canvas.drawPath(mPath, mPathPaint); } //用于设置Y轴的坐标值 public void setDataY( List
yline) { this.yline.clear(); this.yline=yline; } //一个更新UI的方法 public void invalidata(){ invalidate(); }}
 

 

 
 

 

转载于:https://www.cnblogs.com/SongYongQian/p/8256922.html

你可能感兴趣的文章
解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
查看>>
端口号
查看>>
mysql for macOS安装
查看>>
jquery与checkbox的checked属性的问题
查看>>
HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
查看>>
java 格式化字符串
查看>>
[.Net]轻量ORM——Dapper
查看>>
语言基础
查看>>
C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
查看>>
C#中字符串转换成枚举类型的方法
查看>>
psplash
查看>>
git的安装和简单使用
查看>>
Airplace平台
查看>>
TinyOS实例介绍
查看>>
我是怎么定义微服务平台?
查看>>
python random
查看>>
互联网技术
查看>>
input输入框只允许输入数字/ 数字+小数点/ 文字+字母/ 等解决方法
查看>>
【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)...
查看>>
mysql 5.6 参数详解
查看>>