Android自定义组件系列【9】——Canvas绘制折线图

本文介绍如何在Android中利用Canvas自定义绘制折线图,通过示例代码展示绘制过程,并分享改进后的效果。文章提供了一个简单的实现原理和代码片段,帮助开发者理解如何根据项目需求定制图形。
摘要由CSDN通过智能技术生成

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图。先看看绘制的效果:

实现原理很简单,我就直接给出代码:

package com.example.testcanvasdraw;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View{
	private int XPoint = 60;
	private int YPoint = 260;
	private int XScale = 8;  //刻度长度
	private int YScale = 40;
	private int XLength = 380;
	private int YLength = 240;
	
	private int MaxDataSize = XLength / XScale;
	
	private List<Integer> data = new ArrayList<Integer>();
	

	
	private String[] YLabel = new String[YLength / YScale];
	
	private Handler handler = new Handler(){
		public void handleMessage(Message msg) {
			if(msg.what == 0x1234){
				MyView.this.invalidate();
			}
		};
	};
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		for(int i=0; i<YLabel.length; i++){
			YLabel[i] = (i + 1) + "M/s";
		}
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				while(true){
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					if(data.size() >= MaxDataSize){
						data.remove(0);
					}
					data.add(new Random().nextInt(4) + 1);
					handler.sendEmptyMessage(0x1234);
				}
			}
		}).start();
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		paint.setStyle(Paint.Style.STROKE);
		paint.setAntiAlias(true); //去锯齿
		paint.setColor(Color.BLUE);
		
		//画Y轴
		canvas.drawLine(XPoint, YPoint - YLength, XPoint, YPoint, paint);
		
		//Y
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值