android 自訂折線圖

來源:互聯網
上載者:User

標籤:

看圖:

 

比較簡陋,主要是通過canvas畫上去的:

package com.example.democurvegraph.view;import java.util.ArrayList;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup.LayoutParams;/** * 自訂局部折線圖 * @author feijian * @time 2015年6月29日15:37:41 */public class CurveView extends View{    ArrayList<Float> listData;    int mHeight,mWidth;    private int default_circle_radius = 4;    private int selected_circle_radius = 8;    private int padding = 8;    private int widthEMS = 0;  //兩個相鄰描點之間的距離//    private float avg = 0;// listData裡面數組的平均值    private float maxValue = 0;//最大的值    private int lineColor=0; //線條的顏色    private int circleColor=0; //圓圈的顏色    private float pre_X = 0,pre_Y = 0;    public CurveView(Context context) {        super(context);    }    public CurveView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public CurveView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    /**     * 自訂初始化畫圖資料     * @param listData     * @param lineColor     * @param circleColor     */    public void DrawData(ArrayList<Float> listData,int lineColor,int circleColor)    {        this.listData = listData;        LayoutParams llparam = this.getLayoutParams();        mHeight = llparam.height;        mWidth = llparam.width;        if(listData!=null)        {            for(int i=0;i<listData.size();i++)            {                if(this.maxValue < listData.get(i))                {                    this.maxValue = listData.get(i);                }            }        }        this.lineColor = lineColor;        this.circleColor = circleColor;                this.widthEMS = (mWidth-padding*2)/listData.size();        System.out.print("widthEMS="+widthEMS+";mWidth="+mWidth+";paddingLeft="+padding+";size="                +listData.size()+";mHeight="+mHeight);        invalidate();//重新整理介面    }    @Override    protected void onDraw(Canvas canvas) {        System.out.println("onDraw init");        if(listData!=null)        {            System.out.println("onDraw");            Paint circlePaint = new Paint();            circlePaint.setColor(circleColor);            Paint linePaint = new Paint();            linePaint.setColor(lineColor);            for(int i=0;i<listData.size();i++)            {                if(pre_X==0 && pre_Y==0)  //說明開始畫第一個圈圈                {                    pre_X=padding;                    pre_Y = (mHeight - listData.get(i)*mHeight / maxValue);                }                System.out.println("pre_X="+pre_X+";pre_Y="+pre_Y);                if(i > 0)  //這時需要畫前一個線段                {                    canvas.drawLine(pre_X, pre_Y, pre_X+widthEMS, mHeight - listData.get(i)*mHeight / maxValue, linePaint);                    pre_X = pre_X+widthEMS;                    pre_Y = mHeight - listData.get(i)*mHeight / maxValue;                }                canvas.drawCircle(pre_X, pre_Y, default_circle_radius, circlePaint);            }        }                super.onDraw(canvas);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        // 擷取點擊螢幕時的點的座標          float x = event.getX();          float y = event.getY();         System.out.println("x="+x+";y="+y+",event.getAction()"+event.getAction());        return super.onTouchEvent(event);    }}

 

使用方法:

curveView = (CurveView) findViewById(R.id.v_curve);        LayoutParams llparams = curveView.getLayoutParams();        llparams.height = 140;        llparams.width = 400;        ArrayList<Float> listData = new ArrayList<Float>();        listData.add(1f);        listData.add(2f);        listData.add(3f);        listData.add(2f);        listData.add(5f);        listData.add(1f);        listData.add(4f);        curveView.DrawData(listData,Color.parseColor("#ffffff"),Color.parseColor("#ffffff"));

 

demo下載

android 自訂折線圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.