当前位置:编程学习 > JAVA >>

折线图以及渐变

图:

 


View:

 


 

 package com.example.test_chart; 
 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.LinearGradient; 
import android.graphics.Paint; 
import android.graphics.Shader; 
import android.view.View; 
 
public class ChartViewextends View{ 
    public int XPoint=30;    //原点的X坐标  
    public int YPoint=280;     //原点的Y坐标  
    public int XScale=40;     //X的刻度长度  
    public int YScale=40;     //Y的刻度长度  
    public int XLength=240;        //X轴的长度  
    public int YLength=240;        //Y轴的长度  
    public String[] XLabel;   //X的刻度  
    public String[] YLabel;   //Y的刻度  
    public String[] Data;     //数据  
    public String Title;   //显示的标题  
     
    public ChartView(Context context){ 
        super(context); 
    } 
     
    public void SetInfo(String[] XLabels,String[] YLabels,String[] AllData,String strTitle){ 
        XLabel=XLabels; 
        YLabel=YLabels; 
        Data=AllData; 
        Title=strTitle; 
    } 
     
    @Override 
    protected void onDraw(Canvas canvas){ 
        super.onDraw(canvas);//重写onDraw方法  
 
        canvas.drawColor(Color.DKGRAY);//设置背景颜色  
        Paint paint = null; 
         
        Paint paint2= new Paint(); 
        paint2.setStyle(Paint.Style.STROKE); 
        paint2.setAntiAlias(true);//去锯齿  
        paint2.setColor(Color.BLUE);//颜色  
         
        Paint paint1=new Paint(); 
        paint1.setStyle(Paint.Style.STROKE); 
        paint1.setAntiAlias(true);//去锯齿  
        paint1.setColor(Color.GREEN); 
         
        paint = paint1; 
         
        paint.setTextSize(12);  //设置轴文字大小  
         
        /* 设置渐变色 颜色是改变的 */   
        Shader mShader = new LinearGradient(0, 0, 100, 100, 
                new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,   
                        Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。    
        paint.setShader(mShader); 
        //设置Y轴  
        canvas.drawLine(XPoint, YPoint-YLength, XPoint, YPoint, paint);   //轴线  
        for(int i=0;i*YScale<YLength ;i++)                 
        { 
            canvas.drawLine(XPoint,YPoint-i*YScale,XPoint+5, YPoint-i*YScale, paint); //刻度  
            try 
            { 
                canvas.drawText(YLabel[i] ,XPoint-22, YPoint-i*YScale+5, paint); //文字  
            } 
            catch(Exception e) 
            { 
            } 
        } 
        canvas.drawLine(XPoint,YPoint-YLength,XPoint-3,YPoint-YLength+6,paint); //箭头  
        canvas.drawLine(XPoint,YPoint-YLength,XPoint+3,YPoint-YLength+6,paint); 
         
        //设置X轴  
        canvas.drawLine(XPoint,YPoint,XPoint+XLength,YPoint,paint);  //轴线  
        for(int i=0;i*XScale<XLength;i++)     
        { 
            canvas.drawLine(XPoint+i*XScale,YPoint, XPoint+i*XScale,YPoint-5, paint);  //刻度  
            try 
            { 
                canvas.drawText(XLabel[i] ,XPoint+i*XScale-10, YPoint+20, paint);  //文字  
                //数据值  
                    if(i>0&&YCoord(Data[i-1])!=-999&&YCoord(Data[i])!=-999) //保证有效数据  
                        canvas.drawLine(XPoint+(i-1)*XScale, YCoord(Data[i-1]),XPoint+i*XScale, YCoord(Data[i]), paint); 
                    canvas.drawCircle(XPoint+i*XScale,YCoord(Data[i]), 2, paint); 
           } 
            catch(Exception e) 
            { 
            } 
        } 
        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint-3,paint);   //箭头  
        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint+3,paint);   
        paint.setTextSize(16); 
        canvas.drawText(Title, 150, 50, paint); 
    } 
    private int YCoord(String y0) //计算绘制时的Y坐标,无数据时返回-999  
    { 
        int y; 
        try 
        { 
            y=Integer.parseInt(y0); 
        } 
        catch(Exception e) 
        { 
            return -999;    //出错则返回-999  
        } 
        try 
        { 
            return YPoint-y*YScale/Integer.parseInt(YLabel[1]); 
        } 
        catch(Exception e) 
        { 
        } 
        return y; 
    } 
} 

package com.example.test_chart;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.view.View;

public class ChartViewextends View{
    public int XPoint=30;    //原点的X坐标
    public int YPoint=280;     //原点的Y坐标
    public int XScale=40;     //X的刻度长度
    public int YScale=40;     //Y的刻度长度
    public int XLength=240;        //X轴的长度
    public int YLength=240;        //Y轴的长度
    public String[] XLabel;   //X的刻度
    public String[] YLabel;   //Y的刻度
    public String[] Data;     //数据
    public String Title;   //显示的标题
   
    public ChartView(Context context){
        super(context);
    }
   
    public void SetInfo(String[] XLabels,String[] YLabels,String[] AllData,String strTitle){
        XLabel=XLabels;
        YLabel=YLabels;
        Data=AllData;
        Title=strTitle;
    }
   
    @Override
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);//重写onDraw方法

        canvas.drawColor(Color.DKGRAY);//设置背景颜色
        Paint paint = null;
       
        Paint paint2= new Paint();
        paint2.setStyle(Paint.Style.STROKE);
        paint2.setAntiAlias(true);//去锯齿
        paint2.setColor(Color.BLUE);//颜色
       
        Paint paint1=new Paint();
        paint1.setStyle(Paint.Style.STROKE);
        paint1.setAntiAlias(true);//去锯齿
        paint1.setColor(Color.GREEN);
       
        paint = paint1;
       
        paint.setTextSize(12);  //设置轴文字大小
       
        /* 设置渐变色 颜色是改变的 */ 
        Shader mShader = new LinearGradient(0, 0, 100, 100,
                new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW, 
                        Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。 
        paint.setShader(mShader);
        //设置Y轴
        canvas.drawLine(XPoint, YPoint-YLength, XPoint, YPoint, paint);   //轴线
        for(int i=0;i*YScale<YLength ;i++)               
        {
            canvas.drawLine(XPoint,YPoint-i*YScale,XPoint+5, YPoint-i*YScale, paint); //刻度
            try
            {
                canvas.drawText(YLabel[i] ,XPoint-22, YPoint-i*YScale+5, paint); //文字
            }
            catch(Exception e)
            {
            }
        }
        canvas.drawLine(XPoint,YPoint-YLength,XPoint-3,YPoint-YLength+6,paint); //箭头
        canvas.drawLine(XPoint,YPoint-YLength,XPoint+3,YPoint-YLength+6,paint);
       
        //设置X轴
        canvas.drawLine(XPoint,YPoint,XPoint+XLength,YPoint,paint);  //轴线
        for(int i=0;i*XScale<XLength;i++)   
        {
            canvas.drawLine(XPoint+i*XScale,YPoint, XPoint+i*XScale,YPoint-5, paint);  //刻度
            try
            {
                canvas.drawText(XLabel[i] ,XPoint+i*XScale-10, YPoint+20, paint);  //文字
                //数据值
                    if(i>0&&YCoord(Data[i-1])!=-999&&YCoord(Data[i])!=-999) //保证有效数据
                        canvas.drawLine(XPoint+(i-1)*XScale, YCoord(Data[i-1]),XPoint+i*XScale, YCoord(Data[i]), paint);
                    canvas.drawCircle(XPoint+i*XScale,YCoord(Data[i]), 2, paint);
           }
            catch(Exception e)
            {
            }
        }
        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint-3,paint);   //箭头
        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint+3,paint); 
        paint.setTextSize(16);
        canvas.drawText(Title, 150, 50, paint);
    }
    private int YCoord(String y0) //计算绘制时的Y
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,