使用canvas画曲线

来源:互联网 发布:试卷编排软件 编辑:程序博客网 时间:2024/05/09 23:53

Draw类

package com.example.drawtestone;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;public class Draw extends View{//line paintPaint paint = new Paint();//x y axis paintPaint paintPoint = new Paint();//path paintPaint paintPath = new Paint();//x y axis unitprivate float xUnit,yUnit;//x y axis startprivate float xStart,yStart;//x y end startprivate float xEnd,yEnd;public Draw(Context context) {super(context);}public Draw(Context context,AttributeSet attrs) {super(context,attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawColor(Color.WHITE);paint.setColor(Color.BLUE);paintPoint.setColor(Color.RED);paintPath.setColor(Color.BLACK);paintPath.setStyle(Paint.Style.STROKE);Path path = new Path();path.moveTo(100, 100);path.quadTo(500, 300, 300, 400);path.quadTo(200, 400, 500, 600);canvas.drawPath(path, paintPath);xUnit = 50;yUnit = 50;xStart = 40;yStart = 0;xEnd = 500;yEnd = 1000;//y axis drawcanvas.drawLine(xStart, yStart, xStart, yEnd, paint);//x axis drawdrawXAxis(canvas,xStart ,xEnd ,yStart ,yEnd ,yUnit);//draw axis textdrawYText(canvas,paintPoint);drawXText(canvas,paintPoint);}/** * get before data * @param c Calendar object * @param num want to get the number of days * @return ArrayLsit of days */public ArrayList<String> getBeforDay(Calendar c,int num){ArrayList<String> dataArr = new ArrayList<String>();while(num >= 0){int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DATE);String data = month + "/" + day;dataArr.add(data);//set before dayc.set(Calendar.DATE, day-1);num--;}return dataArr;}/** * draw x axis text * @param canvas  * @param paintPoint */public void drawXText(Canvas canvas,Paint paintPoint){Calendar c = Calendar.getInstance();ArrayList<String> dataArr = getBeforDay(c, 7);int dataIndex = dataArr.size()-1;int x = 30;while(x <= 450 && dataIndex >= 0){canvas.drawText(dataArr.get(dataIndex), x, 1020, paintPoint);x += xUnit;dataIndex--;}}/** * draw y axis text * @param canvas * @param paintPoint */public void drawYText(Canvas canvas,Paint paintPoint){float yText = 50.0f;int y = 0;//save one decimal pointDecimalFormat df = new DecimalFormat("##0.0");String text = df.format(yText);while(y <= 1000){canvas.drawText(text + "", 0, 1000-y, paintPoint);y += yUnit;yText += 0.1f;text = df.format(yText);}}/** * draw every x axis * @param canvas * @param xStart * @param xEnd * @param yStart * @param yEnd * @param yUnit */public void drawXAxis(Canvas canvas ,float xStart ,float xEnd ,float yStart ,float yEnd ,float yUnit){do{canvas.drawLine(xStart, yStart, xEnd, yStart, paint);yStart += yUnit;}while(yStart <= yEnd);}public String getTime(){Date date = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd");String time = dateFormat.format(date);return time;}}
layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/linearlayout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.drawtestone.MainActivity" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="draw" />    <com.example.drawtestone.Draw        android:id="@+id/draw1"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>
Main

package com.example.drawtestone;import android.app.Activity;import android.os.Bundle;import android.widget.LinearLayout;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);LinearLayout linearlayout = (LinearLayout)findViewById(R.id.linearlayout);Draw draw = new Draw(this);draw.setMinimumHeight(10000);draw.setMinimumWidth(10000);//draw.setScaleX(10.0f);//draw.setScaleY(10.0f);}}




0 0