做社区生意的网站,在北京网站建设的岗位,国外做设计赚钱的网站,做网站推广需要什么如果你经常使用Canvas的draw***方法去绘制一些图像图形#xff0c;绘制的坐标是从Canvas左上角开始计算的#xff0c;如果想要把一个图像放到某个位置#xff0c;直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样#xff0c;如果你传递进去字符串#xff0c… 如果你经常使用Canvas的draw***方法去绘制一些图像图形绘制的坐标是从Canvas左上角开始计算的如果想要把一个图像放到某个位置直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样如果你传递进去字符串会发现文字的位置和你指定的不一样。 Android的文档也没有仔细说打开源码一看又跑到native代码里去执行了。 对于一段文字来说如果你想把他画到Canvas上首先你要确定这段文字的范围即宽度和高度那么怎么去取这一段的高度呢如果你在网上搜会有很多种答案具体应该用哪一种呢这要看你到底需要什么样的尺寸了。 Paint.getTextBounds: 当你通过这个方法来获取尺寸的时候你可以得到能够包裹文字的最小矩形就是图中红色边框的那部分你可以得到一个Rect对象包含这个最小尺寸的几个值。坑其实就在这里这里的Rect对象坐标并不是以左上角为准的而是相对于左边中间靠下位置的一个点就是图中的黄色五角星。而这里水平的Baseline指的是字符串对齐的一条线。既然这样r.top就是一个负值了r.bottom会是一个小一点的正值r.left和r.right在图中画的都很清楚。通过r.width()和r.height()来获取尺寸。 那么文字的偏移就好说了比如说你要把文字画在Canvas的左上角坐标是(0,0)但是当你通过 1 canvas.drawText(“dangwen”,0,0,paint); 来画文字的时候发现只有文字的下半部分画出来了因为你传递进去的参数应该是以Baseline为标准的正确的方法是 1 canvas.drawText(“dangwen”,-r.left,-r.top,paint); Paint.getFontMetricsInt(): 当你通过这里方法来获取尺寸的时候你获取的只是一个垂直方向上的尺寸这里的ascent代表的是字体的上部descent代表的是字体的下部这里需要注意的是这和上面获得的Rect的top和bottom不太一样他们比比ascent和descent距离稍微小一些这些具体的高度可能和不同的字体和渲染方式有关系这里就不深入了 #我是不懂#。 然后如果把文字写入TextView图中蓝色部分并且设置TextView的高度和宽度设为wrap_content那么TextView的高度就正好是FontMetricsInt.top – FontMetricsInt.bottom, 那宽度呢 Paint.measureText()。