・参考『素人のアンドロイドアプリ開発日記』様
http://andante.in/i/%E6%8F%8F%E7%94%BB/view%E3%82%92%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%80%81%E5%86%8D%E6%8F%8F%E7%94%BB%E3%82%92%E3%81%99%E3%82%8B%E3%80%82/
まずは、上記サイトを参考にまずは描画機能をお勉強。
だいたいOnDrawに描画処理を書いておけば大丈夫みたい。
で、自分用のサンプル作成。
機能としては、
・四角描く処理を埋め込んだView(Viewを継承したクラス)を、メインのViewに埋め込む。
・メインのViewにはシークバーを設置して、埋め込まれたViewの四角の透明度を変更する。
これだけ。
これだけで意外とはまって、結果的に一週間ぐらい悩んでしまいました。
【ハマりどころ】
・カスタムViewを埋め込んだxmlに表示される謎のエラーメッセージ(←メイン)
Custom view * is not using the 2- or 3-argument
View constructors; XML attributes will not workViewを継承したクラスで、コンストラクタが足りていない場合に出るメッセージ。
*は対象のクラス名
このメッセージが表示されていると、カスタムViewが正しく表示されない。
(今読んだらちゃんとコンストラクタって書いてあるんだな)
■解決方法
・参考
『IGOE Solutions』(※英語)
Custom view * is not using the 2- or 3-argument View constructors; XML attributes will not work
Viewを継承したクラスで、スーパークラスのコンストラクタをすべて実装すること。
これだけでした。
解決方法は簡単だけど、こんなことでエラーが起こるなんて可能性が思い浮かばないかぎり、解決は難しいですね。このブログに辿りつけてよかった。
・画面の再描画
初歩です(でした)。
対象のカスタムViewのinvalidate()メソッドを呼び出す。
これが無いと、onDrawメソッドが呼び出されずに、再描画処理がされません。
・描画位置
テキストの描画位置で特にハマりました。
(図添付予定)
drawTextでは、指定した座標から右上にテキストが描画されます。
このため、座標0,0から描画した場合、テキストは右上に見切れ、画面には表示されません。
このため、座標0,0から描画した場合、テキストは右上に見切れ、画面には表示されません。