今日は『ブロックの表示』です
まずはMainActivityから
import android.content.Context import android.os.Bundle import android.util.DisplayMetrics import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity var SCREEN_HEIGHT = 0 //画面の高さ var SCREEN_WIDTH = 0 //画面の幅 val tate: Int = 8 //ブロックの縦の数 val yoko: Int = 5 //ブロックの横の数 var flag_Block = Array(tate) { BooleanArray(yoko) { true } } //ブロックの表示/非表示のフラグ open class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //スクリーンサイズの取得 val vm: WindowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = vm.defaultDisplay val metric = DisplayMetrics() display.getMetrics(metric) SCREEN_WIDTH = metric.widthPixels SCREEN_HEIGHT = metric.heightPixels //ブロックをすべて表示 flag_Block = Array(tate) { BooleanArray(yoko) { true } } } }
次にBlockView.ktファイルを作成します
import android.content.Context import android.graphics.* import android.util.AttributeSet import android.view.View val recWidth = (SCREEN_WIDTH/5.4).toFloat() //ブロックの幅 val recHeight = (SCREEN_HEIGHT/44.8).toFloat() //ブロックの高さ val recPich = (SCREEN_WIDTH/108).toFloat() //ブロックのピッチ val startX = (SCREEN_WIDTH/54).toFloat() //描画開始x座標 val startY = (SCREEN_HEIGHT/89.7).toFloat() //描画開始y座標 class BlockView(context:Context,attrs: AttributeSet?) : View(context, attrs) { private var path: Path = Path() //グラフィック描画 private var paint: Paint = Paint() //色とか太さ val colorList = listOf(Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE) override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) paint.style = Paint.Style.FILL canvas?.drawPath(path, paint) for (i in 0..tate - 1) { paint.color = colorList[i/2] for (j in 0..yoko - 1) { if(flag_Block[i][j]) { canvas?.drawRect( startX + recWidth * j + recPich * j, startY + recHeight * i + recPich * i, startX + recWidth + recWidth * j + recPich * j, startY + recHeight + recHeight * i + recPich * i, paint ) } } } invalidate() } }
ブロックが表示されました
BlockViewはonDrawを使ってブロックの表示だけを行うクラスです
BlockViewはこれで完成です
前回までのゲームより少しレベルアップしました(笑)