自前のチェックボックスを作る
androidでプリセットされているチェックボックスはでかすぎるし、
何よりかわいくない。
というわけで自前でチェックボックスを作ってみた。
【作り方】
(1) 画像を用意する。
⇒on/offの最低二種類。選択されてるっぽいのもあると望ましい。
(2) Viewクラスをjavaで作成する。
⇒ImageViewを親クラスとする。フラグ的な属性とかsetter/getterとか適当につけとく。
(3) レイアウト用のxmlファイルに入れて設置する。
⇒パッケージ名まで書くところ以外は普通のImageViewと同じ。
(4) 再びJavaで、Activityとかの適当な場所でsetOnClickListener / setOnTouchListenerをする。
⇒DOWNイベントで選択されてるっぽいのを埋め込み、UPできちんとしたのをセットする。
フラグにあわせてOn/Off画像を使い分ける。
完了!
とりあえず今回はandroidの☆を使ったが、埋め込む画像次第でなんでも可。(うんこさんファン必見!)
【main.xml】
【ToggleImage.java】
package com.example.vsample;import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;public class ToggleImage extends ImageView{
public ToggleImage(Context context, AttributeSet attrs) {
super(context, attrs);
setMarked(false);
}Boolean marked;
public Boolean getMarked() {
return marked;
}public void setMarked(Boolean _selected) {
marked = _selected;
}
}
【VarriedSample.java】
package com.example.vsample;import java.io.FileNotFoundException;
import java.io.FileReader;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;public class VarriedSample extends Activity {
private static final String TAG = "VarriedSample";@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);ToggleImage image = (ToggleImage) findViewById(R.id.star);
image.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v) {
}
});
image.setOnTouchListener(new OnTouchListener(){@Override
public boolean onTouch(View arg0, MotionEvent event) {
ToggleImage star = (ToggleImage) arg0;switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
star.setImageResource(R.drawable.btn_star_big_on_pressed);
break;
case MotionEvent.ACTION_UP:
if(star.getMarked()){
star.setImageResource(R.drawable.btn_star_big_off_disable);
star.setMarked(false);
}else{
star.setImageResource(R.drawable.btn_star_big_on_disable);
star.setMarked(true);
}
break;
default:
break;
}
return false;
}
});
}
}