【问题标题】:Trying to draw text inside a rectangle but plops of above it at android试图在一个矩形内绘制文本,但在 android
【发布时间】:2019-09-30 08:25:01
【问题描述】:

new picture 现在我正在尝试在我绘制的矩形内绘制一个文本(一个数字)。我想制作2048来了解更多关于android和kotlin的用例。但是当我想创建瓷砖时,我遇到了一个大问题。通常这些数字应该在矩形内,但在我的情况下,它们是原始矩形上方的一个矩形。所以在最后一行瓷砖我没有数字,而在顶部有实际游戏区域上方的数字。如果你真的不明白我的问题,就写一个评论,我会努力让它变得更好。

重要提示:仅更改文本的 y 线并没有帮助,它只会被下一个矩形透支。

这是我用来绘制单个图块的班级:

fun drawTile() {
        var number = tile.number
        var cordX = tile.x
        var cordY = tile.y

        shapeDrawable = ShapeDrawable(RectShape())
        shapeDrawable.setBounds(cordX, cordY, tileWidth, tileHeight)

        shapeDrawable.getPaint().color = tile.tileColor
        shapeDrawable.draw(canvas)

        if(number != 0) {

            var paintText = Paint(Paint.ANTI_ALIAS_FLAG)
            paintText.color = Color.BLACK
            paintText.textSize = 50f

            val numberString = "$number"

            paintText.setShadowLayer(10f, 10f, 10f, Color.BLACK)

            canvas.drawText(numberString, cordX.toFloat()+tileWidth/2, cordY.toFloat()+10, paintText) 

        }

        shapeDrawable.draw(canvas)

Here is an pic how it looks ingame

【问题讨论】:

    标签: java android kotlin text drawing


    【解决方案1】:

    实际上只是改变 y 坐标就可以了,你只需要绘制形状

    fun drawTile() {
            var number = tile.number
            var cordX = tile.x
            var cordY = tile.y
    
            shapeDrawable = ShapeDrawable(RectShape())
            shapeDrawable.setBounds(cordX, cordY, tileWidth, tileHeight)
    
            shapeDrawable.getPaint().color = tile.tileColor
    
            shapeDrawable.draw(canvas)
            if(number != 0) {
    
                var paintText = Paint(Paint.ANTI_ALIAS_FLAG)
                paintText.color = Color.BLACK
                paintText.textSize = 50f
    
                val numberString = "$number"
    
                paintText.setShadowLayer(10f, 10f, 10f, Color.BLACK)
    
                canvas.drawText(numberString, cordX.toFloat() + tileWidth/2, cordY.toFloat() + tileHeight / 2, paintText) 
    
            }
    

    【讨论】:

    • 数字仍然被下面的字段透支
    • 这应该不是问题,我的意思是在你的if (number !=0) 子句之前调用shapeDrawable.draw
    • 我这样做了,但这并没有影响我的绘画我用图片更新了问题
    • 完成了,不要怀疑 y 线 + 10 它只是为了让我可以看到数字的一小部分,如果它被覆盖了
    • 从 if 子句后删除 shapeDrawable.draw(canvas)。
    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多