问题描述
我正在开发小型2D游戏。我已经使用画布创建了自定义网格控件,并将其添加到了主活动中。下面是我放置自定义控件的主要活动代码。
<com.ABC.Test.view.custom.BoardView
android:id="@+id/BoardView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btnLayout"
android:layout_centerHorizontal="true" />
这是我的用户界面设计图片 [画布网格] [1] [1]:https://i.stack.imgur.com/3pLXs.png 当用户单击网格中的任何单元格并输入任何字母时,两者都会创建一些拼写。如果它与预定义的拼写列表匹配,则应弹出在屏幕上进行的拼写,并创建该拼写的移动效果,该效果从网格移动到玩家1按钮。
下面是我的Kotlin代码
override fun onDraw(canvas: Canvas) {
updateMeasurements(width)
fillCells(canvas)
drawLines(canvas)
drawText(canvas)
}
private fun fillCells(canvas: Canvas) {
cells?.forEach {
val r = it.row
val c = it.col
val bgColor: Paint = Paint().apply {
style = Paint.Style.FILL_AND_stroke
color = Color.parseColor("#6ead3a")
}
if ((selectedRow != -1 && selectedCol != -1) && it.isFreezed) {
//bgColor = it.bgFreezColor
bgColor.color = it.myColor
bgColor.style = Paint.Style.FILL_AND_stroke
fillCell(canvas,r,c,bgColor)
} else if (r == selectedRow && c == selectedCol) {
fillCell(canvas,selectedCellPaint)
}
}
}
private fun drawText(canvas: Canvas) {
cells?.forEach { cell ->
val value = cell.value
val row = cell.row
val col = cell.col
val valueString = cell.value
var paintToUse = if (cell.isstartingCell) startingCellTextPaint else textPaint
val textBounds = Rect()
paintToUse.getTextBounds(valueString,valueString.length,textBounds)
var textWidth = paintToUse.measureText(valueString)
val textHeight = textBounds.height()
var xCord = (col * cellSizePixels) + cellSizePixels / 2 - textWidth / 2
val yCord = (row * cellSizePixels) + cellSizePixels / 2 + textHeight / 2
if (cell.isFreezed) {
canvas.drawText(valueString,xCord,yCord,paintToUse)
} else if (selectedRow == row && selectedCol == col) {
canvas.drawText(valueString,(col * cellSizePixels) + cellSizePixels / 2 - textWidth / 2,(row * cellSizePixels) + cellSizePixels / 2 + textHeight / 2,paintToUse)
} else {
cell.value = ""
canvas.drawText("",paintToUse)
}
}
}
如何在画布drawText上创建弹出和移动效果
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)