ボタンやイメージビューの、クリックやタッチイベントを追加します。
Button mybtn = (Button)findViewById(R.id.MyButton);
// タッチイベント
// ボタンを押すとACTION_DOWN、離すとACTION_UPが発生
mybtn.setOnTouchListener(new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//押したとき
} else if (event.getAction() == MotionEvent.ACTION_UP) {
//離したとき
}
// trueにすると他のリスナーが呼ばれない
return false;
}
});
// 長押しイベント
mybtn.setOnLongClickListener(new View.OnLongClickListener(){
public boolean onLongClick(View v){
// trueにすると他のリスナーが呼ばれない
return false;
}
});
// クリックイベント
mybtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
}
});
ImageViewにも使用できます。
イベントリスナーはButtonクラスでもViewクラスでもいけるようです。
ImageViewをアニメーションさせてみます。
まずはコードでアニメーションを設定する方法を紹介します。
以下のようなImageViewがあったとします。
<ImageView id="@+id/img" android:src="@drawable/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" />
ImageViewオブジェクトを生成
ImageView img = (ImageView)findViewById(R.id.img);
移動するアニメーション【TranslateAnimation】
//TranslateAnimation(float fromX, float toX, float fromY, float toY) TranslateAnimation translate = new TranslateAnimation(0, 10, 0, 0); //動作時間を設定(単位ms) translate.setDuration(1000); //繰り返す回数を設定(1度でよい場合は設定しない) translate.setInterpolator(new CycleInterpolator(3)); //アニメーションを開始 img.startAnimation(translate);
ActivityのonCreateで初期設定をおこなう
// アダプターを登録(レイアウトは割愛します)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item);
// 適当にアイテムを追加します
adapter.add("alpha");
adapter.add("beta");
ListView listView = (ListView)findViewById(R.id.list);
listView.setAdapter(adapter);
// リストビューのアイテムがクリックされた時に呼び出されるコールバックリスナーを登録
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ListView listView = (ListView) parent;
// クリックされたアイテムを取得します
String item = (String) listView.getItemAtPosition(position);
Log.v("test", item);
}
});
}
別にイベントクラスを作成する場合
続きを読む…»
【Listactivity.java】
public class ListActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// データの作成
List<CustomData> objects = new ArrayList<CustomData>();
Bitmap image;
image = BitmapFactory.decodeFile(getResources(), R.drawable.ic_lancher);
CustomData item = new CustomData();
item.setImage(image);
for ( int i = 1; i <= 3; i++ ) {
item.setId(i);
item.setNumber(String.valueOf(i));
objects.add(item);
}
CustomAdapter customAdapter = new CustomAdapter(this, 0, objects);
ListView listView = (ListView)findViewById(R.id.list);
listView.setAdapter(customAdapter);
}
}
class CustomAdapter extends ArrayAdapter<CustomData> {
private LayoutInflater layoutInflater_;
public CustomAdapter(Context context, int textViewResourceId, List<CustomData> objects) {
super(context, textViewResourceId, objects);
layoutInflater_ = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 特定の行(position)のデータを得る
CustomData item = (CustomData)getItem(position);
// convertViewは使い回しされている可能性があるのでnullの時だけ新しく作る
if (null == convertView) {
convertView = layoutInflater_.inflate(R.layout.list_item, null);
}
// CustomDataのデータをViewの各Widgetにセットする
ImageView imageView;
imageView = (ImageView)convertView.findViewById(R.id.imageView1);
imageView.setImageBitmap(item.getImage());
TextView textView;
textView = (TextView)convertView.findViewById(R.id._id);
textView.setText(String.valueOf(item.getId()));
TextView textView2;
textView2 = (TextView)convertView.findViewById(R.id.number);
textView2.setText(item.getNumber());
return convertView;
}
}
class CustomData {
private Bitmap image_;
private int id_;
private String number_;
public void setImage(Bitmap image) {
image_ = image;
}
public Bitmap getImage() {
return image_;
}
public void setId(int id) {
id_ = id;
}
public int getId() {
return id_;
}
public void setNumber(String number) {
number_ = number;
}
public String getNumber() {
return number_;
}
}