ドット絵エディタ作業ログ

=前置き=

 ドット絵エディタの設計だけするつもりだったけど、やる気が出てきてしまったので少し作業することにした。ので、そのログ。

XML内で接続=

 以前は接続先とかはコード側で書いていたものの、今回はXML側で書いてみたいと思う。

 既存のコンポーネントには接続先の設定などは用意されていないため、全てカスタムビューで用意する必要がある。(今回の方式の場合、ここらへんが面倒)

 まず、カスタムコンポーネントにリンク先を指定できるように、以下のようなattrs.xmlをvaluesフォルダに作る。

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<declare-styleable name="CustomPaletteButton">
		<attr name="link" format="reference"/>
	</declare-styleable>
</resources>

 そして、以下のような感じでリンクを張る。(TextViewのidにリンクを張っている)

<TextView
	android:id="@+id/hoge"
/>

<showohealer.tool.doteditortile.widget.CustomPaletteButton
	app:link="@id/hoge"
/>

 コード側では、まずコンストラクタに渡されるAttributeSetからリンク先のIDを得る。

if(attrs != null){
	TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.CustomPaletteButton);

	m_LinkID = ta.getResourceId(R.styleable.CustomPaletteButton_link, 0);
}else{
	m_LinkID = 0;
}


 そして、必要になったらリンクIDから実際のViewを取得してあれこれする。(getRootViewから呼び出さないとnullになるので注意)

if(m_LinkID != 0){
	TextView tv = (TextView) getRootView().findViewById(m_LinkID);

	//あれこれする
}

ラジオボタンのカスタマイズ=

 今回はツールアイコンをラジオボタンの挙動で並べたい。ツールアイコンはボタンごとに画像が違い、ツールだけでも11個、流用するのも合わせると20個くらいになる。さすがにそれぞれにXMLを用意してstyleを指定していくのは面倒なので、ラジオボタンのカスタムViewを作り、「XMLで画像指定」「コードで切替」という風にしたい。「XMLで画像指定」は普通にカスタムViewにreferenceとして追加すれば良いので、ここではコードについてだけ書く。


 コード側は自前でDrawを書く方法もあるが、ここではStateListDrawableを使うことにする。これは、XMLでstyleを指定するやつのコード版。なので、書き方も似ていて以下のように書ける。

{//背景画像にStateListDrawableを使い、状態に応じた画像を表示する
	StateListDrawable sld = new StateListDrawable();
	sld.addState(new int[]{android.R.attr.state_checked}, getResources().getDrawable(m_ResID_Chk));
	sld.addState(new int[]{                            }, getResources().getDrawable(m_ResID_Nrm));
	setBackgroundDrawable(sld);
}

 ラジオボタンをカスタマイズする場合、上の設定だけだと元のチェック画像が表示されるため、以下のようにして表示をオフにする。(もっと良い方法がありそうだが、普通にsetButtonDrawable(null)とするだけではダメだった)

{//元のチェック表示をオフにする
	StateListDrawable sld = new StateListDrawable();
	sld.addState(new int[]{}, null);
	setButtonDrawable(sld);
}

=予定=

 ドット絵エディタはAndroidに触れる環境が必要なので土日のどちらかでやることにする。土日のもう片方は普通に休みたいので、Flashを作るのは平日の休憩中になりそう。ひとまず明日からFlash作成を試してみる。今回のはちょっと時間がかかりそうなので、もしかしたら次の週までかかるか土日を使うかもしれない。あるいは別のネタを考えるかもしれない。