カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

ボタンなどのクリック・タッチイベント

ボタンやイメージビューの、クリックやタッチイベントを追加します。

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クラスでもいけるようです。

11,224 views

Androidでアニメーション

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

続きを読む…»

18,043 views

ListViewのクリックイベント

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

別にイベントクラスを作成する場合
続きを読む…»

7,887 views

画像付のリスト表示

【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_;
  }
}

続きを読む…»

4,349 views

画像の非同期読み込み

画像を表示する際、読み込み完了までプログレスバーを表示させたい。
ユーザービリティを考慮し、非同期にて実装する方法を書きます。

まずXMLにProgressBarとImageViewを用意します。

<ProgressBar 
  android:id="@+id/progressBar"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  style="?android:attr/progressBarStyle"
  android:layout_gravity="center_vertical|center_horizontal"
  />
<ImageView
  android:id="@+id/imageView1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:visibility="gone" />

続きを読む…»

7,058 views