指をスライドすると数値がくるくる回って、スマホ感を演出できます。
注意点としては、Version11以降しか対応していないことです。
丁度スマホが流行りだしたAndroid2.2、Android2.3の頃の端末に対応していないのは使いづらい点ではありますが。。。。
また、Version11より前でも使えるライブラリ(個人で作った)も公開されていますが、端末によっては動かない等ありますので、あんまりお勧めはません。。。
Androidアプリを作成したい人必見!!Androidアプリの基本動作はもちろんのこと、本には載っていない、調べても見つからない、ソースを修正するだけでは解決できない、アプリ開発者が直面する問題の解決方法についても記載していきます。 *基本的にはレイアウトファイル(xml)を使わないソースを載せております。
package com.pulepule.linear;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import android.widget.Toast;
import android.widget.NumberPicker.OnValueChangeListener;
public class MainActivity extends Activity implements OnValueChangeListener{
//レイアウト用の定数
final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//基レイアウトの作成
LinearLayout oLayout = new LinearLayout(getApplicationContext());
//基レイアウトを画面に設定
setContentView(oLayout);
//背景を黒にする(見やすいように)
oLayout.setBackgroundColor(Color.BLACK);
//真ん中にパーツを寄せる。 | 区切りで複数記述できます。
oLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL );
//データピッカーの生成
NumberPicker oPicker = new NumberPicker(getApplicationContext());
//データピッカーの最小値を設定
oPicker.setMinValue(3);
//データピッカーの最大値を設定
oPicker.setMaxValue(1120);
//データーピッカーの背景色を
oPicker.setBackgroundColor(Color.BLUE);
//値が変更された時に通知するリスナー
oPicker.setOnValueChangedListener(this);
oLayout.addView(oPicker, new LinearLayout.LayoutParams(WC, WC));
//値をピッカーに設定
oPicker.setValue(5);
}
@Override
public void onValueChange(NumberPicker picker, int iBefValue, int iActValue) {
Toast.makeText(getApplicationContext(), String.valueOf(iActValue), Toast.LENGTH_SHORT).show();
Log.d("ひとつ前の選択",String.valueOf( iBefValue ));
Log.d("picker.getValue()",String.valueOf( picker.getValue()));
}
}
■実行結果
package com.example.sumple01;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private List oGridList = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//基礎画面の作成
LinearLayout oLyout = new LinearLayout(getApplicationContext());
//グリットビューの生成
GridView oGridView = new GridView(getApplicationContext());
//基礎画面を画面に設定
setContentView(oLyout);
//基礎画面にグリットビューを追加
oLyout.addView(oGridView);
//グリットビューのセル?の作成
for (int i = 0; i < 10; i ++){
//配列にタイトルと画像を格納
oGridList.add(new GridClass(String.valueOf("番号:" + i), R.drawable.ic_launcher));
}
//列数を設定(-1にするとAUTO_FIT)
oGridView.setNumColumns(3);
//グリットビューに各セルの情報を設定
oGridView.setAdapter(new ListAdapter());
}
private class ListAdapter extends BaseAdapter {
@Override
public int getCount() {
//グリッド総数
return oGridList.size();
}
@Override
public Object getItem(int position) {
//配列の中身
return oGridList.get(position);
}
@Override
public long getItemId(int position) {
//現在の配列の場所
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView title;
ImageView imag;
View v = convertView;
if(v==null){
//レイアウト用の定数
final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
//グリットビューの1マス内のレイアウトを作成
LinearLayout oGridLyout = new LinearLayout(getApplicationContext());
oGridLyout.setGravity(Gravity.CENTER_HORIZONTAL);
//上から下にアイテムを追加
oGridLyout.setOrientation(LinearLayout.VERTICAL);
//イメージビューを生成
ImageView oGridImage = new ImageView(getApplicationContext());
//テキストビューを生成
TextView oGridText = new TextView(getApplicationContext());
//判別用にタグをつける
oGridImage.setTag("CellImage");
oGridText.setTag("CellTitle");
//グリットビュー用のレイアウトに追加
oGridLyout.addView(oGridImage, new LinearLayout.LayoutParams(WC, WC));
oGridLyout.addView(oGridText, new LinearLayout.LayoutParams(WC, WC));
v = oGridLyout;
}
//配列から、アイテムを取得
GridClass oGrid = (GridClass)getItem(position);
if( oGridList != null){
//タグからテキストビューを取得
title = (TextView) v.findViewWithTag("CellTitle");
//取得したテキストビューに文字列を設定
title.setText(oGrid.Get_Title());
//タグからイメージビューを取得
imag = (ImageView) v.findViewWithTag("CellImage");
//イメージビューに画像を設定
imag.setBackgroundResource(oGrid.Get_Image());
}
return v;
}
}
}
■クラスファイル
package com.example.sumple01;
public class GridClass{
private String Title;
private int imgRid;
public GridClass(String title, int resId){
Title = title;
imgRid = resId;
}
public String Get_Title(){
return Title;
}
public int Get_Image(){
return imgRid;
}
}
■実行結果
package com.example.sample;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
import android.app.Activity;
public class MainActivity extends Activity implements OnCheckedChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//レイアウトの生成
LinearLayout layout=new LinearLayout(getApplicationContext());
//上から下にオブジェクトを配置するよう設定
layout.setOrientation(LinearLayout.VERTICAL);
//画面表示の設定
setContentView(layout);
//レイアウトパラム定数(縦横の長さの定数)の格納
int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
int MP = ViewGroup.LayoutParams.MATCH_PARENT;
//ラジオグループの登録
RadioGroup oRadiGrop = new RadioGroup(getApplicationContext());
//チェック時の処理を通知させる
oRadiGrop.setOnCheckedChangeListener(this);
//左から右へとオブジェクトを配置
oRadiGrop.setOrientation(LinearLayout.HORIZONTAL);
oRadiGrop.setGravity(Gravity.CENTER_HORIZONTAL);
//ラジオグループをレイアウトに追加
layout.addView(oRadiGrop, new LinearLayout.LayoutParams(MP, MP);
//レイアウトパラムの作成
LayoutParams oLayPar = new LinearLayout.LayoutParams(WC, WC);
//ラジオグループにラジオボタンを追加
oRadiGrop.addView(Make_RadioButton(0, "ROW"), oLayPar);
oRadiGrop.addView(Make_RadioButton(1, "MID"), oLayPar);
oRadiGrop.addView(Make_RadioButton(2, "HIGH"), oLayPar);
}
@Override
public void onCheckedChanged(RadioGroup oRG, int Id) {
//無選択状態のidは-1
if (Id ==-1)return;
//IDに紐づくテキストを取得
String sText = String.valueOf(((RadioButton)findViewById(Id)).getText());
//現在チェックされているidを取得
int iActiveID = oRG.getCheckedRadioButtonId();
//選択されたIDに紐づくテキストを表示
Toast.makeText(getApplicationContext(), sText ,Toast.LENGTH_SHORT).show();
//アクティブなIDを表示
Toast.makeText(getApplicationContext(), String.valueOf(iActiveID),Toast.LENGTH_SHORT).show();
}
private RadioButton Make_RadioButton(int id, String sTitle){
//ラジオボタンの生成
RadioButton oRadioBtn = new RadioButton(this);
//ラジオボタンにIDを設定
oRadioBtn.setId(id);
//ラジオボタンに文字列を設定
oRadioBtn.setText(sTitle);
//ラジオボタンを消す
oRadioBtn.setButtonDrawable(android.R.id.empty);
//作成したxmlを背景に設定
oRadioBtn.setBackgroundResource(R.drawable.stylebutton);
//ラジオボタンを返す
return oRadioBtn;
}
}
●xmlファイル
package com.example.sample;
import android.os.Bundle;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
import android.app.Activity;
public class MainActivity extends Activity implements OnCheckedChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//レイアウトの生成
LinearLayout layout=new LinearLayout(getApplicationContext());
//上から下にオブジェクトを配置するよう設定
layout.setOrientation(LinearLayout.VERTICAL);
//レイアウトパラム定数(縦横の長さの定数)の格納
int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
//レイアウトの横幅・縦幅を設定
LayoutParams oLayPar = new LinearLayout.LayoutParams(WC, WC);
//画面表示の設定
setContentView(layout);
//ラジオグループの登録
RadioGroup oRadiGrop = new RadioGroup(getApplicationContext());
//チェック時の処理を通知させる
oRadiGrop.setOnCheckedChangeListener(this);
//ラジオグループにラジオボタンを追加
oRadiGrop.addView(Make_RadioButton(0,"ON"), oLayPar);
oRadiGrop.addView(Make_RadioButton(1,"OFF"), oLayPar);
//ラジオグループをレイアウトに追加
layout.addView(oRadiGrop, oLayPar);
}
@Override
public void onCheckedChanged(RadioGroup oRG, int Id) {
//無選択状態のidは-1
if (Id ==-1)return;
//IDに紐づくテキストを取得
String sText = String.valueOf(((RadioButton)findViewById(Id)).getText());
//現在チェックされているラジオボタンのidを取得
int iActiveID = oRG.getCheckedRadioButtonId();
//選択されたIDに紐づくテキストを表示
Toast.makeText(getApplicationContext(), sText ,Toast.LENGTH_SHORT).show();
//アクティブなIDを表示
Toast.makeText(getApplicationContext(), String.valueOf(iActiveID),Toast.LENGTH_SHORT).show();
}
private RadioButton Make_RadioButton(int id, String sTitle){
//ラジオボタンの生成
RadioButton oRadioBtn = new RadioButton(this);
//ラジオボタンにIDを設定
oRadioBtn.setId(id);
//ラジオボタンに文字列を設定
oRadioBtn.setText(sTitle);
//ラジオボタンを返す
return oRadioBtn;
}
}
■実行結果