画图-drawpoint and drawpath
版权声明:本文因海牛宝宝童鞋才疏学浅,可能晦涩难懂,但也是呕心沥血之作,麻烦转载的时候留个申明。 https://blog.csdn.net/u012321815/article/details/26018163
嗯,又是半个月没更新了,由于近期才考完试。事实上这个是月头就做好的项目的一部分。一直没把它写出来,事实上也不难。
事实上就是绘图,我这里讲两种方式,当然,事实上有非常多方式,我主要是依照做得项目来学习的,事实上我最初考虑是用drawpath的方法来绘图,后来发现给我的数据点足够多,所以就用drawpoint方法,画出来的图显示出来也是像我们看到的那样是连续的一幅。
首先,谈谈要做成什么效果。由于我要画的是铁轨的轨廓图,已有的是一个标准轨廓的CAD图上取下来的点,是一个txt文件,坐标是一个二维的(x,y)。我要做的就是用这些点,来画出廓形图,当然事实上还有其它的要求。那是项目要求的,和我们说的主题不是非常有关。所以就不说了。
从这个我们就能够看出来。第一。我们要能把这个txt文件的数据读取出来,最好能依照我们想要的方式读取。其次,我们选用什么方式画,我这里两种我都说。由于我认为都非常easy的操作,主要就是重写一个onDraw()的方法。和实例化一个自己的view来继承view类。然后更新我们的view。
嗯,首先说下怎么得到我要的点吧。毫无疑问就是读文件操作,可是,我们怎么把这些点获取呢?这里用的就是切割,(split)。取到的点是x,y坐标,中间有一个逗号,利用这个逗号把x,y坐标提取出来。然后提取出来的数据。存在一个Hash表中,这样能够方便我们查找这张表,从而来得到点的坐标。
public void dealFile(String path){
File file = new File(path);//得到文件
String i=null;
if(file.exists()){
try{
FileReader reader = new FileReader(file);
BufferedReader bRreader = new BufferedReader(reader);
String line = null;
while((line = bRreader.readLine()) != null)//读操作
{
a = line.split(",");
idList.add(i);
map = new HashMap<String,Object>();
map.put("x", a[0]);
map.put("y", a[1]);
//map.put("z", a[2]);
listItem.add(map);
}
}catch(Exception e){
}
}
切割每行。得到两个数据。分别存在了数组a里面,然后把这条记录写进表里面,运行完这个文件操作,就能够得到一个hash表。里面存的就是我们x,y坐标。并且方便我们读取。
有了这些点,我们要做的就是绘图。
由于我这里取的点密度非常大,所以我能够直接drawpoint方法就能够把这些点作出来。而用户看到的效果却不是单个的点,而是连续的一个弧线。
至于drawpoint方法,首先要做的是写一个继承view的类,显示的时候载入的不是.xml文件,而是这个类的一个实例。而在这个实例中,重写了onDraw这种方法,而drawpoint也就是在这种方法中被调用。
至于drawpoint这方法的參数,有三个,两个是坐标,最后一个是画笔。(paint),画笔是设置这个绘制的属性的,这画点的时候不是非常好理解,假设说画线,线的颜色、粗细等,这都是设置画笔来实现的。当然,我一直忘记说画布(canvas)了。画布的作用就是绘图的画板。你的图是在画布上绘制的,所以重写的onDraw这种方法的传入參数就是这个画布。还有bitmap,这个的概念事实上就是自己定义一个图片,裁剪它得到我们想显示出来的部分。
直接给出drawpoint方法和drawpath方法代码,非常好理解。
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//设置区域
//canvas.clipRect(0, 300, 720, 800);
canvas.clipRect(0, 200, 480, 500);
canvas.drawColor(Color.BLACK);
canvas.save();
//绘图
mpaint.setAntiAlias(true);
mpaint.setColor(Color.WHITE);
mpaint.setStyle(Paint.Style.STROKE);
mpaint.setStrokeWidth(3);//线宽
//文字显示
String familyName = "宋体";
Typeface font = Typeface.create(familyName, Typeface.BOLD);
pword.setTypeface(font);
pword.setColor(Color.WHITE);
pword.setTextSize(22);
//红线
pshowred.setColor(Color.RED);
pshowred.setStyle(Paint.Style.STROKE);
pshowred.setStrokeWidth(3);//线宽
//黄线
pshowyellow.setColor(Color.YELLOW);
pshowyellow.setStyle(Paint.Style.STROKE);
pshowyellow.setStrokeWidth(3);//线宽
//绘图
for (HashMap<String, Object> map : listItem) {
Object objectx = map.get("x");
Object objecty = map.get("y");
float x = Float.parseFloat(objectx.toString());
float y = Float.parseFloat(objecty.toString());
canvas.drawPoint(translate_x(x), translate_y(y), mpaint);
}
//固定文字
//canvas.drawText("设计轨廓", 300, 700, pword);
canvas.drawText("设计轨廓", 200, 450, pword);
canvas.drawTextOnPath("非工作边", pathword, 0, 0, pword);
//不固定部分
//第一个点
canvas.drawPath(path1r,pshowred);
canvas.drawPath(path1, pshowyellow);
canvas.drawPath(path1y, pshowyellow);
//canvas.drawText("第一", translate_x(13)-30, translate_y(33.0486)-230, pword);
canvas.drawText("第一", translate_x(13)-30, translate_y(33.0486)-130, pword);
//第二个点
canvas.drawPath(path2r,pshowred);
canvas.drawPath(path2, pshowyellow);
canvas.drawPath(path2y, pshowyellow);
// canvas.drawText("第二", translate_x(25)-30, translate_y(34.5339)-230, pword);
canvas.drawText("第二", translate_x(25)-30, translate_y(34.5339)-130, pword);
//第三个点
canvas.drawPath(path3r,pshowred);
canvas.drawPath(path3, pshowyellow);
canvas.drawPath(path3y, pshowyellow);
//canvas.drawText("第三", translate_x(36.5)-30, translate_y(34.8134)-230, pword);
canvas.drawText("第三", translate_x(36.5)-30, translate_y(34.8134)-130, pword);
//第四个点
canvas.drawPath(path4r,pshowred);
canvas.drawPath(path4, pshowyellow);
canvas.drawPath(path4y, pshowyellow);
//canvas.drawText("第四", translate_x(65)-30, translate_y(31.4158)-230, pword);
canvas.drawText("第四", translate_x(65)-30, translate_y(31.4158)-130, pword);
}
}
我这里直接贴出来的是项目里面的代码,不想自己重写一段画点的代码。事实上里面包含了画点、沿路径作图、写字、沿路径写字等等方法。这里面有对坐标进行变换。由于CAD取到的点坐标是实际的坐标。而我们显示在手机上的须要缩放,并且还有对y轴进行取反。
大致的效果图例如以下。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlzaHVjYWk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
画图-drawpoint and drawpath的更多相关文章
- Android画图系列(二)——自己定义View绘制基本图形
这个系列主要是介绍下Android自己定义View和Android画图机制.自己能力有限.假设在介绍过程中有什么错误.欢迎指正 前言 在上一篇Android画图系列(一)--自己定义View基础中我们 ...
- Android中利用画图类和线程画出闪烁的心形
本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: <ig ...
- 【转】C#中Graphics的画图代码
C#中Graphics的画图代码[转] 架上图片了你就可以在画板上涂改了啊 我要写多几个字上去string str = "Baidu"; //写什么字?Font font = Fo ...
- android.graphics(2) - Path, drawPath, moveTo, lineTo, addRect, addCircle, addOval, addArc, drawText, drawTextOnPath
一.创建路径 canvas中绘制路径利用: void drawPath (Path path, Paint paint) 1.直线路径 void moveTo (float x1, float y1) ...
- android.graphics(1) - Paint, Canvas, drawLine, drawPoint, drawRect, drawRoundRect, drawCircle, drawOval, drawArc
一.Paint与Canvas 像我们平时画图一样,需要两个工具,纸和笔.Paint就是相当于笔,而Canvas就是纸,这里叫画布. 所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明 ...
- Android使用Canvas画图
1.参考:http://blog.csdn.net/rhljiayou/article/details/7212620/ 2.常用方法: 1.Canvas类 drawArc 绘制弧 drawBitma ...
- c# GDI画图 双缓冲画图分析
双缓冲绘图分析 1.Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...
- Android自己定义View画图实现拖影动画
前几天在"Android画图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙.我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
随机推荐
- C# 泛型 default()方法
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型. 如果 T 为值类型,则它是数值还是结构. 给定参数化类型 T 的一个变量 t ...
- ccentos 7下安装php5.6并使用nginx + php-fpm部署多个不同端口网站
作为一个的勤杂工,近期因公司内部信息化的需求,给新进员工提供基础的知识培训和介绍,也为了给公司内部建立一个沟通交流的平台,百度找了开源的百科系统HDwiki和开源的问答系统Tipask问答系统,蛋痛的 ...
- Java_MD5的使用
在Java中使用MD5摘要还是很方便的,直接上代码. package com.cxc.nothing; import java.nio.charset.Charset; import java.sec ...
- abp使用风格定义
一个开发人员的开发模式下面.用这个有太多代码要写了.所以需要限制与规范自己: 基于abp新系统的开发过程1>*.Core 增加文件夹eg:Questions1.1>增加实体文件eg:QAQ ...
- UVA - 11584 划分字符串的回文串子串; 简单dp
/** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...
- PHP中插件机制的一种实现方案
这篇文章的出发点是我对插件机制的理解,及其在PHP中的实现.此方案仅是插件机制在PHP中的实现方案之一,写下来和大家分享,欢迎大家一起讨论. 插件,亦即Plug-in,是指一类特定的功能模块(通常由第 ...
- 使用.NET JustDecompile来反编译你的程序代码
前言 在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序,由于因为是别人写的所以我们并没有原始码可以直接阅读,碰到这种情况我们就需要去反编译这些程序及 DLL ...
- kafka 集群--3个broker 3个zookeeper创建实战
准备工作: 1. 准备3台机器,IP地址分别为:192.168.0.10,192.168.0.11,192.168.0.12 2. 下载kafka稳定版本,我的版本为:kafka_2.9.2-0.8. ...
- Servlet线程安全 Filter http://zwchen.iteye.com/blog/91088
概述 在探讨java线程安全前,让我们先简要介绍一下Java语言. 任何语言,如C++,C#,Java,它们都有相通之处,特别是语法,但如果有人问你,Java语言的核心是什么?类库?关键字?语法?似乎 ...
- Laragon集成开发环境+配置Xdebug+postman运行Xdebug
[ Laravel 5.5 文档 ] 快速入门 —— 使用 Laragon 在 Windows 中搭建 Laravel 开发环境:http://laravelacademy.org/post/7754 ...