《android中利用Canvas绘制折线图》由会员分享,可在线阅读,更多相关《android中利用Canvas绘制折线图(9页珍藏版)》请在金锄头文库上搜索。
1、android中利用Canvas绘制折线图2013-12-28 11:46:56|分类:android|举报|字号订阅运行的效果图:1.我们都知道要想显示一个我们自己定义的View有两种方法:a.直接new 一个我们的View对象,并且setContentView(MyView);假如我们自己定义的对象叫myview,我们可以在java中使用下面的代码实现:MyView myView = new MyView(this);setContentView(myView);b.第二种方法是把它放到我们的布局文件中,例如:其中的com.example是我们程序的包名。用这种方法必须在我们自定义的Vie
2、w类中也就是MyView中加上构造方法:public MyView(Context context, AttributeSet attributeSet)super(context, attributeSet);下面看代码:MainActivity.javapackage com.example;import com.example.chartest.R;import android.app.Activity;import android.os.Bundle;/* * 显示图标界面 * author ycl * */public class MainActivity extends Activ
3、ity /* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ChartView myView = (ChartView) this.findViewById(R.id.myView);System.out.println(1);myView.SetInfo(new String 7-11, 7-
4、12, 7-13, 7-14, 7-15,7-16, 7-17 , / X轴刻度new String , 50, 100, 150, 200, 250 , / Y轴刻度new int 15, 23, 10, 36, 45, 40, 12 , / 数据图标的标题);activity_main.xmlChartView.javapackage com.example;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.P
5、aint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Scroller;/* * 图标 * author ycl * */public class ChartView extends View public int XPoint = 40; / 原点的X坐标public int YPoint = 460; / 原点的Y坐标public int XScale = 55; / X的刻度长度public int YScal
6、e = 60; / Y的刻度长度public int XLength = 380; / X轴的长度public int YLength = 360; / Y轴的长度public String XLabel; / X的刻度public String YLabel; / Y的刻度public int Data; / 数据public String Title; / 显示的标题private float screenW, screenH;private float lastX;private float lastY;private Scroller scroller;private float to
7、tal_Width = 0;public ChartView(Context context, AttributeSet attr) super(context, attr);scroller=new Scroller(context);screenW = this.getWidth();screenH = this.getHeight();public void SetInfo(String XLabels, String YLabels, int AllData,String strTitle) XLabel = XLabels;YLabel = YLabels;Data = AllDat
8、a;Title = strTitle;Overrideprotected void onDraw(Canvas canvas) super.onDraw(canvas);/ 重写onDraw方法System.out.println(3);/ canvas.drawColor(Color.WHITE);/设置背景颜色Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);/ 去锯齿paint.setColor(Color.BLACK);/ 颜色Paint paint1 = new
9、Paint();paint1.setStyle(Paint.Style.STROKE);paint1.setAntiAlias(true);/ 去锯齿paint1.setColor(Color.DKGRAY);paint.setTextSize(12); / 设置轴文字大小/ 设置Y轴(对于系统来讲屏幕的原点在左上角)canvas.drawLine(XPoint, YPoint - YLength, XPoint, YPoint, paint); / 轴线for (int i = 0; i * YScale YLength; i+) canvas.drawLine(XPoint, YPoint
10、 - i * YScale, XPoint + 5, YPoint - i* YScale, paint); / 刻度 XPoint+5画出了一条短的小横线try canvas.drawText(YLabeli, 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 - YLe
11、ngth, XPoint + 3, YPoint - YLength+ 6, paint);/ 设置X轴canvas.drawLine(XPoint, YPoint, XPoint + XLength, YPoint, paint); / 轴线for (int i = 0; i * XScale 0 & YCoord(Datai - 1) != -999& YCoord(Datai) != -999) / 保证有效数据canvas.drawLine(XPoint + (i - 1) * XScale,YCoord(Datai - 1), XPoint + i * XScale,YCoord(D
12、atai), paint);canvas.drawCircle(XPoint + i * XScale, YCoord(Datai), 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,