自前のチェックボックスを作る

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;
}
});
}
}