使用canvas画曲线
2015-07-06 10:36
197 查看
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 paint Paint paint = new Paint(); //x y axis paint Paint paintPoint = new Paint(); //path paint Paint paintPath = new Paint(); //x y axis unit private float xUnit,yUnit; //x y axis start private float xStart,yStart; //x y end start private float xEnd,yEnd; public Draw(Context context) { super(context); } public Draw(Context context,AttributeSet attrs) { super(context,attrs); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.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 draw canvas.drawLine(xStart, yStart, xStart, yEnd, paint); //x axis draw drawXAxis(canvas,xStart ,xEnd ,yStart ,yEnd ,yUnit); //draw axis text drawYText(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 day c.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 point DecimalFormat 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 { @Override protected 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); } }
相关文章推荐
- Android 转换UTC时间:2013-06-13T14:15:44.000的时间格式 为GMT时间
- 19、find 命令的参数详解
- 常见的NoSQL数据库
- css字体属性(font)
- AngularJS简介-起步阶段
- hdu 4576 概率dp **
- EGL, GLX/WGL/AGL 和GL之间的关系
- Google HTML/CSS代码风格指南(中文版)
- URI和URLConnection类的区别
- hive一些思考
- 内存拷贝和字符串拷贝
- SAPLink详细体验
- kernel build
- JavaScript一个类继承中实现
- CSS属性选择器
- hive一些思考
- struts2的@Result annotation 如何添加params
- 伪分布模式 hive查询
- hive 连接查询sql对比效率
- hdu 1381 Crazy Search