【Android】Canvas APIの使い方

Advent Calendar 2022

この記事は最終更新日から1年以上が経過しています。

この記事はレコチョク Advent Calendar 2022の14日目の記事となります。

はじめに

はじめまして、秦基博さんと日向坂46さんに日々癒しと元気をいただいている休井です。
株式会社レコチョクでAndroidの開発をしています。

最近はJetpack Composeを使用してUI作成をすることが多いのですが、何となく難しそうで触れてこなかったCanvas APIについて、実際に使ってみながらご紹介したいと思います。

Canvas APIについて

Androidでは、Jetpack ComposeというUIツールキットが提供されており、宣言的にUIを作成することができます。
CanvasはそのJetpack Composeに含まれるAPIで、画面内の位置(座標)を用いてレイアウトの設定を行うことができるので、かなり自由度高くカスタムレイアウトを作成することができます。

基本的な使い方

  1. 線を引く
    drawLine() を使用します。
    startendで線の開始と終了を指定して線を引くことができます。


  2. 四角形を描く
    drawRect()を使用します。
    topLeftで描画位置を決め、 sizeで大きさを指定して四角形を描くことができます。

    角丸の四角形にしたい場合は、 drawRoundRect()を使い cornerRadiusに丸の半径を設定します。


  3. 円を描く
    drawCircle()を使用します。
    centerで描画位置を決め、 radiusで半径を設定して円を描くことができます。

    また、楕円を描きたい場合は、 drawOval()を使用します。
    topLeftで描画位置を決め、 sizeで大きさを設定して楕円を描くことができます。


  4. 弧を描く
    drawArc()を使用します。
    startAngleで開始位置( 0Fが3時の方向)を決め、 sweepAngleで弧の角度を設定して弧を描くことができます。
    また、 useCentertrueにすると、扇型に描画することができます。


  5. 点を描く
    drawPoints()を使用します。
    pointsで描きたい点の位置をリストで指定して点を描くことができます。
    また、 pointModeで描き方、 capで点の形を設定できます。


  6. パスを決めて描く
    drawPath()を使用します。
    pathを作成し drawPath()に渡すことで、作成した pathに色を付けることができます。

使ってみた

Canvasでできることと使い方の基本について確認できたので、単純なアナログ時計のレイアウトを描いてみました。

centerでCanvasの中心のOffsetを取得したり、 dp.toPx()でDpからピクセルへの変換をしたりもできるので、機種によってレイアウトが崩れるという心配も少なそうですね。

おわりに

今回はJetpack ComposeのCanvas APIの使い方についてご紹介しました。
私自身今回でほぼ初めて触れましたが、シンプルなレイアウトであればさほど難しくなく作れそうです。
アニメーションをつけたり、テキストを入れたりすることもできるようなので、今後勉強して使いこなせるようになりたいと思います。

最後まで読んでいただきありがとうございました。
明日のレコチョク Advent Calendar 2022は15日目 シンプルな掲示板を素のPHPとCakePHPで作って比較する となります。お楽しみに!

この記事を書いた人

休井千明
最近書いた記事