0
0

Jetpack ComposeのCanvasでメーターのような可変する円を作る

Posted at

drawCircle()

    Canvas(
        modifier = Modifier.size(250.dp),
        onDraw = {
            drawCircle(Color.Green)
        }
    )

スクリーンショット 2024-02-18 21.38.41.png

可変でない場合の円の場合はdrawCircle() または、drawOval() 使用すればいいのですが、メーターのように中を可変させたい場合は、drawArc() を使用します。

次は上のdrawCircle()を背景としてdrawArc()を使ってみましょう.

drawArc()

    Column(
        Modifier.size(225.dp)
    ) {
        Canvas(
            modifier = Modifier.size(225.dp),
            onDraw = {
            
                drawCircle(Color.Green)
                
                drawArc(
                    color = Color.Yellow,
                    startAngle = -90f,
                    sweepAngle = 90f,
                    useCenter = true,
                )
            }
        )
    }

スクリーンショット 2024-02-18 21.52.39.png
startAnglesweepAngleを指定することで
上の画像のようのできます。

例えば、何かのメーターのように使いたいなら、表示したい情報を取得した時や数秒置きなどにとsweepAngleを調節すればいいと思います。
sweepAngleはstartAngleの位置からの角度になります。

startAngleは 0が時計の3時の方向ななっているので、メーターのスタート位置を円の上部にしたい場合、270f もしくは-90fを指定します。
(私が触ったプロジェクトでは270fだとうまく表示されない時があった。謎。)

注意

useCenterをfalseにすると、以下のようになるので必ずtrueにしておきましょう。

スクリーンショット 2024-02-18 21.59.29.png

Canvas()の外枠を Column()(たぶん何でもいい)などで囲って範囲を指定しないと
スクリーンショット 2024-02-18 22.33.56.png
こんな感じで表示できる範囲いっぱいに表示されてしまう。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0