[Android] Canvas クリアーして再描画

Canvas で描画した領域を動的に非表示にしたり表示したりする場合には、canvas.drawColor(0, PorterDuff.Mode.CLEAR) を使います。また同時に、クリアした後で再描画しますがそれには invalidate() を使います。
 
canvas clear 01 - [Android] Canvas クリアーして再描画

Android Studio 3.5.3
API 29

 



Canvasの再描画

 
先の例でCanvasのViewをRelativeLayoutの中で使うことをやってみました。TextViewなどは表示、非表示ができますがCanvasの場合はどうでしょう。
Cavasの場合は一旦クリアーして、その後再描画が必要です。次に表示させる時にもまた再描画が必要です。

最初に簡単のためボタンで表示・非表示を実装してみたいと思います。その後でHandlerを使ってCanvasのViewをアニメーションさせてみます。
 

 

invalidate()

 
描画をクリアーするには、

canvas.drawColor(0, PorterDuff.Mode.CLEAR)

を使います。

また再描画のためにはinvalidate()を使います。Canvasをクリアしてから描画です。
ただし、invalidate()は再描画させるためにonDraw()を呼び出しますが、即呼び出されるわけではなく、都合がつくまで待たされるようです。ですから、即非表示を想定する場合はHandlerを使う方法が必要になります。

以前にCanvasを作成した方法 と同様に作成します。
例として package は 「package com.example.testcanvasclear」 で設定しました。
button によりフラグを切り替え
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
を実行して
invalidate();
で再描画します

 

サンプルコード

 

MyView.java

 
MainActivity.java

 
activity_main.xml

 
Stringのリソース
strings.xml

 

マニュアルで表示・非表示ができました

 

Handlerを使う

 
invalidate()ですが、ちゃんと使うにはHandler等を利用する必要があります。
Event Handling and Threading

Note: The entire view tree is single threaded. You must always be on the UI thread when calling any method on any view. If you are doing work on other threads and want to update the state of a view from that thread, you should use a Handler 

 

Handler()を使ってアニメーションの作成

 
試しにHandler()とinvalidate()を使ってアニメーションを作ってみます。
Handler()で50msec毎にCanvas上のCircleのY軸座標を増加させて、Circleが落ちていくアニメーションです。

packageはcom.example.testcanvasclearhandler
に変更しました。

MainActivity.java

 
MyView.java

 
レイアウトとリソース
activity_main.xml

strings.xml

 

サンプル動画

 

 
Handlerを使わないでAnimationを使ったやり方がこちらにあります。
 

 

canvas a01 - [Android] Canvas クリアーして再描画 canvas insertion 01 - [Android] Canvas クリアーして再描画 canvas clear 01 - [Android] Canvas クリアーして再描画 canvasimagetext 01 - [Android] Canvas クリアーして再描画 canvas animation 01 - [Android] Canvas クリアーして再描画

 
References:
Canvas | Android Developers
Canvas and Drawables | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加

 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

オンラインスクールは色々ありますが、以下の3つはAndroidが学習できる老舗スクールです。


TECH ACADEMY
Androidアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。




シェアする

  • このエントリーをはてなブックマークに追加

フォローする