• 安卓canvas操作的总结


    2014.07.03 使用canvas绘图

    需求:公司需要绘制波形图,类似数学上的正弦波,一条是参考值,一条是实际曲线

    解决方法:采用canvas绘图。保存为图片,以供导出

    这里提供一个学习的demo

    为了方便调试,看到绘制的效果,因此用canvas 绘制一个视图,放入activity 中。

    具体代码如下:

    protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            setContentView(new CustomView1(this));
    
        }
        

    这里的Customview 是一个自定义的类,继承了view。

    它的构造函数必须要传递当前的activity对象或其他容器

    public CustomView1(Context context) {
                super(context);
    }

    图片的绘制,具体的细节实现在 该类的ondraw中

    @Override
            protected void onDraw(Canvas canvas) {
    //具体绘图代码

    有了这些,就算准备好了绘图的大致框架。现在就开始来绘图吧

    首先需要一个画笔,同时设置一些参数

    paint = new Paint(); // 设置一个笔刷大小是3的黄色的画笔
                paint.setColor(Color.BLUE);
                // paint.setStrokeJoin(Paint.Join.ROUND); //图像结合的效果 例如平滑
                 paint.setStrokeCap(Paint.Cap.ROUND); //笔刷的样式 例如圆形 方形等
                paint.setStrokeWidth(9);
                // paint.setStyle(Paint.Style.STROKE); //设置为空心
                paint.setStyle(Paint.Style.FILL); // 设置为实心

    然后就是绘制图形,简单的图形,已经有现成的方法,譬如圆形,矩形等

    // 绘制圆
    
                canvas.drawCircle(200, 200, 100, paint);
    
    // 绘制弧线区域
    
                RectF rect = new RectF(0, 0, 100, 100);
    
                canvas.drawArc(rect, // 弧线所使用的矩形区域大小
                        0, // 开始角度
                        90, // 扫过的角度
                        true, // 是否使用中心
                        paint);
                // 绘制没有中心的弧线
                rect = new RectF(100, 0, 200, 100);
    
                canvas.drawArc(rect, // 弧线所使用的矩形区域大小
                        0, // 开始角度
                        90, // 扫过的角度
                        false, // 是否使用中心
                        paint);
    
                // 绘制色块。
                // canvas.drawColor(Color.BLACK);
    
                // 绘制直线
                canvas.drawLine(300, 300, 450, 450, paint);
    
                rect = new RectF(300, 0, 400, 300);
                // 矩形区域内切椭圆
                canvas.drawOval(rect, paint);
    
                /* 绘制文字 */
                /*canvas.drawPosText("Android777", new float[] { 400,
                        10, // 第一个字母在坐标10,10
                        410,
                        20, // 第二个字母在坐标20,20
                        430,
                        30, // ....
                        440, 40, 450, 50, 460, 60, 470, 70, 480, 80, 490, 90, 500,
                        100 }, paint);
                        */
    
                /* 绘制文字 */
                //canvas.drawText("吴文付", 500, 150, paint);
    
                /* 画矩形 */
                //rect = new RectF(550, 250, 600, 350);
    
                // canvas.drawRect(rect, paint); //直角矩形
    
                // 椭圆矩形
                /*canvas.drawRoundRect(rect, 30, // x轴的半径
                        30, // y轴的半径
                        paint);
                
                
                Path path = new Path(); //定义一条路径    
                path.moveTo(0, 450); //移动到 坐标10,10    
                path.lineTo(50, 490);    
                path.lineTo(100,560);    
                path.lineTo(120, 580);    
                      
                canvas.drawPath(path, paint);   
                
                
                path = new Path(); //定义一条路径    
                path.moveTo(100, 500); //移动到 坐标10,10    
                path.lineTo(50, 600);    
                path.lineTo(200,660);    
                path.lineTo(10, 670);    
              
    //          canvas.drawPath(path, paint);    
                canvas.drawTextOnPath("吴文付开发者博客", path, 10, 10, paint); 
                
                drawSouth(canvas);

    如果需要绘制比较复杂的图形,建议通过绘制点来实现或者 路径绘制来实现。

    这前提就需要一个算法,提供点的集合。这里就不说了,具体情况具体应用。

    一个技巧: 由于工作需要,绘制的线性图,需要填充,但是填充色 与线性图的线 要不同色。

    方法是 : 改变画笔的 样式 和颜色,重复画。即可实现。

    paint.setStyle(Paint.Style.STROKE);
    paint.setStyle(Paint.Style.FILL);

    演示的工程地址:http://download.csdn.net/detail/douniwan123654/7586469

    QQ:540045865 热爱生活,热爱编程。
  • 相关阅读:
    跨域现象及原理分析
    git的commit撤销
    什么是幂等,什么情况下需要幂等,如何实现幂等
    flowable表简要说明
    关于SpringCloud、SpringBoot简单讲解
    常用的maven仓库地址
    Python安装第三方库常用方法
    反编译pyinstaller打包的exe安装包
    测试用例-需要添加@Transactional 这样 就不会再数据库里面留下痕迹了
    断点 太多了 调试运行特别慢-把所有的历史断点都去掉就快了
  • 原文地址:https://www.cnblogs.com/jsRunner/p/3821905.html
Copyright © 2020-2023  润新知