ライブ進捗リングを作る
キャンバスと状態を組み合わせてウィジェットを作ります。
「ライブ進捗リングを作る」はCoddyKit上の無料Jetpack Compose Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJetpack Compose Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Jetpack Compose Academyコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
The Goal
Time to build something real: a progress ring that fills as a value grows. It blends canvas drawing with live Compose state.
An Arc, Not a Circle
A ring is really an arc. We draw a faint full circle as a track, then a bright arc on top showing the progress so far.
Hold the Progress
Store the value in state so the ring redraws when it changes. A float from 0f to 1f maps cleanly to zero through full.
var progress by remember { mutableStateOf(0.25f) }Draw the Track
First paint the background ring with drawCircle using a Stroke. A soft gray track shows the full path the progress will fill.
drawCircle(
color = Color.LightGray,
style = Stroke(width = 24f)
)Meet drawArc
The hero is drawArc. It draws a slice of a circle defined by a start angle and a sweep angle, both measured in degrees.
drawArc(
color = Color.Blue,
startAngle = -90f,
sweepAngle = 90f,
useCenter = false
)Start at the Top
Angle 0 points right, so we use a startAngle of -90f to begin at the top. That feels natural for a progress indicator.
Sweep by Progress
A full circle is 360 degrees, so the sweepAngle is just progress times 360. At 0.5f the arc covers exactly half the ring.
val sweep = progress * 360f
drawArc(color = Color.Blue, startAngle = -90f, sweepAngle = sweep, useCenter = false)useCenter Stays False
Keep useCenter false so you draw a ring slice, not a filled pie wedge. With a Stroke style it becomes a clean rounded band.
drawArc(color = Color.Blue, startAngle = -90f, sweepAngle = sweep, useCenter = false, style = Stroke(width = 24f, cap = StrokeCap.Round))Animate the Value
Wrap the value in animateFloatAsState so changes glide instead of jumping. The ring then smoothly grows toward each new target.
val animated by animateFloatAsState(targetValue = progress)Add a Gradient
Swap the flat color for a sweepGradient brush and the ring gets a vivid, modern look as the colors rotate around it.
drawArc(brush = Brush.sweepGradient(listOf(Color.Cyan, Color.Magenta)), startAngle = -90f, sweepAngle = sweep, useCenter = false, style = Stroke(24f))Layer the Label
Place a Text showing the percentage in a Box centered over the Canvas. Now your widget reads as a complete, polished control.
Quick Check
How do you turn a 0f-to-1f progress value into the arc's sweep?
Recap
You built a live ring: a track circle, a drawArc swept by progress times 360, animated state, and a gradient stroke. Beautiful work! 🌀
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「ライブ進捗リングを作る」レッスンは無料ですか?
はい。「ライブ進捗リングを作る」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Jetpack Compose Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Jetpack Compose Academyコースには全4レッスンが含まれています。
「ライブ進捗リングを作る」で何を学びますか?
キャンバスと状態を組み合わせてウィジェットを作ります。 ブラウザで直接実行するハンズオンコードでJetpack Compose Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Jetpack Compose Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJetpack Compose Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ライブ進捗リングを作る」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJetpack Compose Academyレッスンでコードを書いて実行できますか?
はい。すべてのJetpack Compose Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。