2010年4月27日より、ソフトバンクモバイル初となるAndroid搭載スマートフォン「HTC Desire SoftBank X06HT」が発売されました。
詳しくはhttp://www.htc.com/jp/product/x06ht/overview.html
MediaPlayer を使ってみた
android で mp3, midi などを再生するには
MediaPlayer を使います
そして drawable/raw を作ってその中にメディアファイルを格納します
その後, MediaPlayer.create(context, resid); で作成します
というわけで, MediaPlayer をいじってみた
サンプルプログラム
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/media/MediaPlayer.html
MediaPlayer を使います
そして drawable/raw を作ってその中にメディアファイルを格納します
その後, MediaPlayer.create(context, resid); で作成します
というわけで, MediaPlayer をいじってみた
サンプルプログラム
import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MediaPlayerTest extends Activity implements OnClickListener { private MediaPlayer mediaPlayer = null; private Button button_Play; private Button button_Pause; private Button button_Stop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.soundtest); button_Play = (Button) findViewById(R.id.Button01); button_Play.setOnClickListener(this); button_Pause = (Button) findViewById(R.id.Button02); button_Pause.setOnClickListener(this); button_Stop = (Button) findViewById(R.id.Button03); button_Stop.setOnClickListener(this); // メディアプレイヤーの作成 mediaPlayer = MediaPlayer.create(this, R.raw.sample); // ループ再生の設定 // mediaPlayer.setLooping(true); } @Override public void onClick(View v) { if (v == button_Play) { // 再生してなかったら if (!mediaPlayer.isPlaying()) { // MediaPlayerの再生 mediaPlayer.start(); } } else if (v == button_Pause) { // MediaPlayerの一時停止 mediaPlayer.pause(); } else if (v == button_Stop) { // 再生してたら if (mediaPlayer.isPlaying()) { // MediaPlayerの停止 mediaPlayer.stop(); try { // MediaPlayerの準備 mediaPlayer.prepare(); } catch (Exception e) {} } } } }
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/media/MediaPlayer.html
ToneGenerator を使ってみた
ToneGeneratorを使うと簡単にトーンを鳴らせます
コンストラクタは
ToneGenerator (int streamType, int volume);
第1引数はストリームの種類
第2引数は音量
んで、
startTone(int ToneType) or startTone(int ToneType, int durationMs)
で再生します
後者は再生する時間を指定
Toneの種類に関してはToneGeneratorから
というわけで, ToneGenarator をいじってみた
サンプルプログラム
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/media/ToneGenerator.html
http://developer.android.com/intl/ja/reference/android/media/AudioManager.html
コンストラクタは
ToneGenerator (int streamType, int volume);
第1引数はストリームの種類
第2引数は音量
んで、
startTone(int ToneType) or startTone(int ToneType, int durationMs)
で再生します
後者は再生する時間を指定
Toneの種類に関してはToneGeneratorから
というわけで, ToneGenarator をいじってみた
サンプルプログラム
import android.app.Activity; import android.media.AudioManager; import android.media.ToneGenerator; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ToneGeneratorTest extends Activity { ToneGenerator toneGenerator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tonegeneratortest); // ToneGenerator の作成 toneGenerator = new ToneGenerator( AudioManager.STREAM_ALARM, ToneGenerator.MAX_VOLUME ); ((Button) findViewById(R.id.Button01)) .setOnClickListener(new OnClickListener() { public void onClick(View v) { // Tone再生 toneGenerator.startTone(ToneGenerator.TONE_CDMA_ABBR_ALERT); // toneGenarator.stratTone(ToneGenerator.TONE_CDMA_ABBR_ALERT, 1000); } }); ((Button) findViewById(R.id.Button02)) .setOnClickListener(new OnClickListener() { public void onClick(View v) { // Tone停止 toneGenerator.stopTone(); } }); } @Override public void onDestroy() { super.onDestroy(); // ToneGenerator の解放 toneGenerator.release(); } }
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/media/ToneGenerator.html
http://developer.android.com/intl/ja/reference/android/media/AudioManager.html
Tab を作ってみた
Tab を使うには TabHost と TabWidget を使います
そして TabWidget でTabのコンテンツを表示するのに FrameLayout を使います
Tabのコンテンツとして 任意のViewを表示させるのと, Activityを起動する2種類があるようです
というわけで, Tab を作ってみた
注意するのは id として
XMLリソース
また, Tab が切り替わったときのアイコンの切り替えもXMLで指定できます
以下のように作ってres/drawable に置きます
ここで Activity でなく TabActivity というのを継承させます
サンプルプログラム
プログラムを実行すると...
こんな感じ!
今回は Intent で自分自身を読んでます
当たり前ですが何回も呼ぶとオーバーフローして落ちます
Tab で TabActivity を呼べば多段の Tab ができそう!
参考サイト
http://developer.android.com/intl/ja/resources/tutorials/views/hello-tabwidget.html
http://developer.android.com/intl/ja/reference/android/widget/TabHost.html
http://developer.android.com/intl/ja/reference/android/widget/TabWidget.html
そして TabWidget でTabのコンテンツを表示するのに FrameLayout を使います
Tabのコンテンツとして 任意のViewを表示させるのと, Activityを起動する2種類があるようです
というわけで, Tab を作ってみた
注意するのは id として
- TabHost は @android:id/tabhost
- TabWidget は @android:id/tabs
- メインの FrameLayout は @android:id/tabcotent
XMLリソース
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" ... /> <FrameLayout android:id="@android:id/tabcontent" android:padding="5dp" ... > <LinearLayout android:id="@+id/content1" android:orientation="vertical" ... > <TextView ... /> </LinearLayout> <LinearLayout android:id="@+id/content2" ・ ・ ・ </LinearLayout> </FrameLayout> </LinearLayout> </TabHost>
また, Tab が切り替わったときのアイコンの切り替えもXMLで指定できます
以下のように作ってres/drawable に置きます
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 選択されたときの画像 --> <item android:drawable="@android:drawable/star_big_on" android:state_selected="true" /> <!-- 選択されていないときの画像 --> <item android:drawable="@android:drawable/star_big_off" /> </selector>んで, 本体
ここで Activity でなく TabActivity というのを継承させます
サンプルプログラム
import android.app.TabActivity; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.widget.TabHost; import android.widget.TextView; import android.widget.TabHost.OnTabChangeListener; public class TabTest extends TabActivity implements OnTabChangeListener { private static final String TAG[] = { "tag1", "tag2", "tag3", }; private static final String LABEL[] = { "Label1", "Label2", "Label3", }; TabHost tabHost; TabHost.TabSpec spec; TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tabtest); textView = new TextView(this); // TabHost の取得 tabHost = getTabHost(); // Tab が切り替わったときに呼ばれるコールバックを登録 tabHost.setOnTabChangedListener(this); /********** Tab その1 **********/ // TabSpec の作成 spec = tabHost.newTabSpec(TAG[0]); // インジケーターの設定 spec.setIndicator(LABEL[0]); // Tab のコンテンツの設定 spec.setContent(R.id.content1); // TabHost に Tab を追加 tabHost.addTab(spec); /********** Tab その2 **********/ spec = tabHost.newTabSpec(TAG[1]) // アイコン付きインジケーターの設定 .setIndicator(LABEL[1], getResources().getDrawable(R.drawable.icon)) .setContent(R.id.content2); tabHost.addTab(spec); textView.setText("Text"); textView.setBackgroundColor(Color.DKGRAY); textView.setTextColor(Color.RED); textView.setGravity(Gravity.CENTER); /********** Tab その3 **********/ // 起動したいアクティビティのIntent作成 Intent intent = new Intent().setClass(this, TabTest.class); spec = tabHost.newTabSpec(TAG[2]) // インジケーターに任意のビューを設定 .setIndicator(textView) // Intent を設定 .setContent(intent); tabHost.addTab(spec); // 現在の Tab を設定 tabHost.setCurrentTab(0); } // Tab が切り替わったときの動作 (引数はTag) public void onTabChanged(String tabId) { if (tabId == TAG[2]) textView.setBackgroundColor(Color.LTGRAY); else textView.setBackgroundColor(Color.DKGRAY); } }これでOK!
プログラムを実行すると...
こんな感じ!
今回は Intent で自分自身を読んでます
当たり前ですが何回も呼ぶとオーバーフローして落ちます
Tab で TabActivity を呼べば多段の Tab ができそう!
参考サイト
http://developer.android.com/intl/ja/resources/tutorials/views/hello-tabwidget.html
http://developer.android.com/intl/ja/reference/android/widget/TabHost.html
http://developer.android.com/intl/ja/reference/android/widget/TabWidget.html
HorizontalScrollView を使ってみた
横方向にスクロールさせるには
HorizontalScrollView を使います
その名の通り ScrollView の横バージョンです
HorizontalScrollView は ScrollView と同様一つしか子ビューを持てないので
LineaLayout などにまとめて入れてやります
というわけで, HorizontalScrollView をいじってみた
XMLリソース
プログラムを実行すると...
こんな感じ!
一番下にスクロールバーが表示されています
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/HorizontalScrollView.html
HorizontalScrollView を使います
java.lang.Object ↳ android.view.View ↳ android.view.ViewGroup ↳ android.widget.FrameLayout ↳ android.widget.HorizontalScrollView
その名の通り ScrollView の横バージョンです
HorizontalScrollView は ScrollView と同様一つしか子ビューを持てないので
LineaLayout などにまとめて入れてやります
というわけで, HorizontalScrollView をいじってみた
XMLリソース
<HorizontalScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/HorizontalScrollView"> <LinearLayout android:id="@+id/LinearLayout" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HorizontalScrollViewTest"> </TextView> ・ ・ ・ </LinearLayout> </HorizontalScrollView>アクティビティー側で setContentView で設定
プログラムを実行すると...
こんな感じ!
一番下にスクロールバーが表示されています
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/HorizontalScrollView.html
XML で Menu
Menu を XML で作成したいときは
/res に menu というフォルダを作成し、その中にxmlファイルを作成します
XML は以下のようにすればOKです
submenu を作りたいときは item の中に menu を入れてあげます。
XML リソース
そして,
MenuInflater というクラスを使ってXMLを取得します
サンプルプログラム
あとは普通に onOptionsItemSelected(MenuItem item) などをオーバーライドすればアイテムが選択された際の処理などもできます
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#menus
http://developer.android.com/intl/ja/reference/android/view/MenuInflater.html
/res に menu というフォルダを作成し、その中にxmlファイルを作成します
XML は以下のようにすればOKです
submenu を作りたいときは item の中に menu を入れてあげます。
XML リソース
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item01" android:title="Menu01"/> <group android:id="@+id/menu_group01"> <item android:icon="@drawable/icon" android:id="@+id/menu_item02" android:title="Menu02"/> </group> <item android:id="@+id/menu_item03" android:title="Menu03"> <menu> <item android:id="@+id/submenu_item01" android:title="Sub_Menu01"/> <item android:id="@+id/submenu_item02" android:title="Sub_Menu02/"> </menu> </item> </menu>
そして,
MenuInflater というクラスを使ってXMLを取得します
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; public class MenuXMLTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } // Option Menu が最初に表示される時に1度だけ呼び出される @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // MenuInflater の取得 MenuInflater menuInflater = getMenuInflater(); // MenuInflater から XML の取得 menuInflater.inflate(R.menu.menutest, menu); return true; } }
あとは普通に onOptionsItemSelected(MenuItem item) などをオーバーライドすればアイテムが選択された際の処理などもできます
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#menus
http://developer.android.com/intl/ja/reference/android/view/MenuInflater.html
Eclipse で Xperia用アプリ開発準備
EclipseでXperia用のアプリを開発するためには、
まず、以下のソニーエリクソンのページ(http://developer.sonyericsson.com/wportal/devworld/downloads)
から, Android の部分にある [All Android Downloads] をクリックし
『Sony Ericsson Xperia X10 add-on for the Android SDK』というのをダウンロード
ダウンロードしたファイルを解凍して [Android SDK]を保存してあるディレクトリを開いて、その中にある [add-ons]ディレクトリの中に置く
そしたら、次は Eclipse を開く
普通のAVDの作成と同じで
[Window] -> [Android SDK and AVD Manager] 移動して [New] をクリック
すると [Target] に『X10 (Sony Erricsson ...』というのがあるのでそれを選択
Skin も『X10』を選択(たぶんデフォルトでなってる)
んで [Create AVD]
そして、プロジェクトの作成
Android 1.6 用のものがあるならわざわざ新しいのを作らなくても大丈夫
こちらも [Target Name] のところに『X10』が現れるので選択
これでOK!
そして、[Run Configurations] で Tagetをさっき作った『X10』のAVDを選んで実行すると...
こんな感じ!
やっぱ Xperia かっこいいですね!
まず、以下のソニーエリクソンのページ(http://developer.sonyericsson.com/wportal/devworld/downloads)
から, Android の部分にある [All Android Downloads] をクリックし
『Sony Ericsson Xperia X10 add-on for the Android SDK』というのをダウンロード
ダウンロードしたファイルを解凍して [Android SDK]を保存してあるディレクトリを開いて、その中にある [add-ons]ディレクトリの中に置く
そしたら、次は Eclipse を開く
普通のAVDの作成と同じで
[Window] -> [Android SDK and AVD Manager] 移動して [New] をクリック
すると [Target] に『X10 (Sony Erricsson ...』というのがあるのでそれを選択
Skin も『X10』を選択(たぶんデフォルトでなってる)
んで [Create AVD]
そして、プロジェクトの作成
Android 1.6 用のものがあるならわざわざ新しいのを作らなくても大丈夫
こちらも [Target Name] のところに『X10』が現れるので選択
これでOK!
そして、[Run Configurations] で Tagetをさっき作った『X10』のAVDを選んで実行すると...
こんな感じ!
やっぱ Xperia かっこいいですね!
XML で Animation
Animation を XML で作成したいときは
/res に anim というフォルダを作成し、その中にxmlファイルを作成します
アニメーションの要素としては以下のようなものがあります
サイズを指定するものでViewサイズに対する比率を指定できるわけですが
以下の2種類で指定します
というわけで、アニメーションを作ってみた
下からズームインしてくるアニメーション
zoom_in_from_bottom.xml
こんな感じで作成します
作成したら
AnimationUtilsクラスの
loadAnimation(context, id) メソッドを使ってアニメーションを取得
例えば
AnimationUtils.loadAnimation(context, R.anim.zoom_in_from_bottom);
というふうにすれば取得できます!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#animation
http://developer.android.com/intl/ja/reference/android/view/animation/AnimationUtils.html
/res に anim というフォルダを作成し、その中にxmlファイルを作成します
アニメーションの要素としては以下のようなものがあります
- set
- alpha
- scale
- translate
- rotate
- interpolator
サイズを指定するものでViewサイズに対する比率を指定できるわけですが
以下の2種類で指定します
% : View のサイズに対する比率 %p : 親View のサイズに対する比率
というわけで、アニメーションを作ってみた
下からズームインしてくるアニメーション
zoom_in_from_bottom.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:duration="1000"> </scale> <translate android:fromYDelta="100%p" android:toYDelta="0.0" android:duration="1000"> </translate> </set>
こんな感じで作成します
作成したら
AnimationUtilsクラスの
loadAnimation(context, id) メソッドを使ってアニメーションを取得
例えば
AnimationUtils.loadAnimation(context, R.anim.zoom_in_from_bottom);
というふうにすれば取得できます!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#animation
http://developer.android.com/intl/ja/reference/android/view/animation/AnimationUtils.html
XML でカスタムView
既存の View を拡張して新たに自分だけの View を作成したいときは
まず、res/values に attrs.xml を作成します
attrs.xml
declare-styleable の name属性は作成するカスタムビューのクラス名を指定する
次に、レイアウトを作成します
xmlns:app="http://schemas.android.com/apk/res/パッケージの名前"
というのを追加します
app は勝手につけた名前
attrs.xml で作成した属性を指定します
XMLリソース
そしたら、カスタムビューの作成
サンプルプログラム(CustomView)
Activity では setContentView で作成した layout を指定するだけ
サンプルプログラム(Activity)
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#customresources
まず、res/values に attrs.xml を作成します
attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- name : custom view class name --> <declare-styleable name="CustomView"> <attr name="text" format="string" /> <attr name="color" format="color" /> <attr name="size" format="dimension" /> </declare-styleable> </resources>
declare-styleable の name属性は作成するカスタムビューのクラス名を指定する
次に、レイアウトを作成します
xmlns:app="http://schemas.android.com/apk/res/パッケージの名前"
というのを追加します
app は勝手につけた名前
attrs.xml で作成した属性を指定します
XMLリソース
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/androidtest.app" android:id="@+id/LinearLayout" android:layout_height="fill_parent" android:layout_width="fill_parent"> <androidtest.app.CustomView android:id="@+id/CustomView" android:layout_height="fill_parent" android:layout_width="fill_parent" app:text="CustomViewTest" app:color="#FFFF0000" app:size="32sp" /> </LinearLayout>
そしたら、カスタムビューの作成
サンプルプログラム(CustomView)
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import androidtest.app.R; public class CustomView extends View { String str; int color; int size; public CustomView(Context context, AttributeSet attrs) { super(context, attrs); // styleable から TypedArray の取得 TypedArray tArray = context.obtainStyledAttributes( attrs, R.styleable.CustomView ); // TypedArray から String を取得 str = tArray.getString(R.styleable.CustomView_text); // TypedArray から Color を取得 color = tArray.getColor(R.styleable.CustomView_color, 0xFFFFFFFF); // TypedArray から Dimension を取得 size = tArray.getDimensionPixelSize(R.styleable.CustomView_size, 12); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(color); paint.setTextSize(size); canvas.drawText(str, 32, 64, paint); } }
Activity では setContentView で作成した layout を指定するだけ
サンプルプログラム(Activity)
import android.app.Activity; import android.os.Bundle; import androidtest.app.R; public class CustomViewTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.customviewtest); } }
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#customresources
ToggleButton を使ってみた
ToggleButton は
というわけで、ToggleButton を使ってみた
サンプルプログラム
XMLリソースで設定もできます
XMLリソース
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/ToggleButton.html
java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button ↳ android.widget.CompoundButton ↳ android.widget.ToggleButtonを使います
というわけで、ToggleButton を使ってみた
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.ToggleButton; public class ToggleButtonTest extends Activity { ToggleButton toggleButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.togglebuttontest); toggleButton = (ToggleButton) findViewById(R.id.ToggleButton01); // ToggleButton が On のときのテキストを設定 toggleButton.setTextOn("Toggle ON"); // ToggleButton が Off のときのテキストを設定 toggleButton.setTextOff("Toggle OFF"); // ToggleButton が On かどうかを設定 toggleButton.setChecked(true); // ToggleButton が On かどうかを取得 boolean checked = toggleButton.isChecked(); } }
XMLリソースで設定もできます
XMLリソース
<ToggleButton android:id="@+id/ToggleButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textOff="Toggle Off" android:textOn="Toggle On"> </ToggleButton>
プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/ToggleButton.html
いろいろな AlertDialog
AlertDialog.Builderクラスを使っていろいろな AlertDialog を作ってみた
サンプルプログラム
AlertDialog(EditText)
SingleChoiceDialog
MultiChoiceDialog
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/app/AlertDialog.html
http://developer.android.com/intl/ja/reference/android/app/AlertDialog.Builder.html
サンプルプログラム
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class AlertDialogTest2 extends Activity implements View.OnClickListener { AlertDialog.Builder alertDialogBuilder; Button button[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alertdialogtest2); button = new Button[3]; for (int i = 0; i < 3; i++) { d.Button01 + i); button[i].setOnClickListener(this); } } public void onClick(View v) { if (v == button[0]) { setEditAlertDialog(); } else if (v == button[1]) { setSingleChoiceDialog(); } else if (v == button[2]) { setMultiChoiceDialog(); } } /* AlertDialog(EditText) */ public void setEditAlertDialog() { EditText editText = new EditText(this); editText.setText("Please fill your name!"); alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setTitle("EditTextDialog"); // AlertDialog に View を設定 alertDialogBuilder.setView(editText); // Positive Button を設定 alertDialogBuilder.setPositiveButton( "Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Positive Button がクリックされた時の動作 } } ); alertDialogBuilder.show(); } /* SingleChoiceDialog */ public void setSingleChoiceDialog() { // 表示させるアイテム名 final String[] str_items = { "One", "Two", "Three" }; alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setTitle("SingleChoiceDialog"); // 初めに選ばれているアイテム final int default_item = 0; // SingleChoiceDialog の作成 alertDialogBuilder.setSingleChoiceItems( str_items, default_item, new OnClickListener() { public void onClick(DialogInterface dialog, int which) { // アイテムが選ばれたときの動作 } } ); // Positive Button を設定 alertDialogBuilder.setPositiveButton( "Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Positive Button がクリックされた時の動作 } } ); alertDialogBuilder.show(); } /* MultiChoiceDialog */ public void setMultiChoiceDialog() { // 表示させるアイテム名 final String[] str_items = { "Red", "Green", "Blue" }; // 各アイテムがチェックされている状態かどうか final boolean[] flag_items = { false, true, false }; alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setTitle("MultiChoiceDialog"); // MultiChoiceDialog の作成 alertDialogBuilder.setMultiChoiceItems( str_items, flag_items, new OnMultiChoiceClickListener() { public void onClick( DialogInterface dialog, int which, boolean isChecked) { // アイテムが選ばれたときの動作 } } ); // Positive Button を設定 alertDialogBuilder.setPositiveButton( "Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Positive Button がクリックされた時の動作 } } ); alertDialogBuilder.show(); } }プログラムを実行すると...
AlertDialog(EditText)
SingleChoiceDialog
MultiChoiceDialog
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/app/AlertDialog.html
http://developer.android.com/intl/ja/reference/android/app/AlertDialog.Builder.html
Spannable で文字のマークアップ
Spannable はテキストをマークアップするためのインターフェースです
CharacterStyleなどのクラスを使って文字列の一部を
下線を引いたり、下付き文字にしたり、
上付き文字にしたり、URLを付けたり...
と様々なことができます
CharacterStyle のサブクラスには
というわけで, Spannable でテキストをいじってみた
サンプルプログラム
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/text/Spannable.html
http://developer.android.com/intl/ja/reference/android/text/style/CharacterStyle.html
CharacterStyleなどのクラスを使って文字列の一部を
下線を引いたり、下付き文字にしたり、
上付き文字にしたり、URLを付けたり...
と様々なことができます
CharacterStyle のサブクラスには
- UnderlineSpan
- SubscriptSpan
- SuperscriptSpan
- URLSpan
- ScaleXSpan
- RelativeSizeSpan etc...
というわけで, Spannable でテキストをいじってみた
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.text.Spannable; import android.text.Spannable.Factory; import android.text.style.RelativeSizeSpan; import android.text.style.ScaleXSpan; import android.text.style.SubscriptSpan; import android.text.style.SuperscriptSpan; import android.text.style.URLSpan; import android.text.style.UnderlineSpan; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class SpannableTest extends Activity { Spannable spannable; UnderlineSpan underline; SubscriptSpan subscript; SuperscriptSpan superscript; URLSpan url; ScaleXSpan scaleX; RelativeSizeSpan relative; TextView textView[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.spannabletest); textView = new TextView[4]; for (int i = 0; i < 4; i++) { textView[i] = (TextView) findViewById(R.id.TextView01 + i); } // UnderlineSpan underline = new UnderlineSpan(); // SubscriptSpan subscript = new SubscriptSpan(); // SuperscriptSpan superscript = new SuperscriptSpan(); // URLSpan url = new URLSpan("http://weide-dev.blogspot.com/"); // ScaleXSpan scaleX = new ScaleXSpan(0.5f); // RelativeSizeSpan relative = new RelativeSizeSpan(0.5f); // Factory の取得 Factory factory = Spannable.Factory.getInstance(); /* アンダーラインが引かれた文字列 */ // Spannable の取得 spannable = factory.newSpannable(textView[0].getText()); // 0からテキストの長さ分まで下線を引く spannable.setSpan( underline, 0, textView[0].getText().length(), spannable.getSpanFlags(underline) ); // TextView にテキストを設定 textView[0].setText(spannable, TextView.BufferType.SPANNABLE); /* 後ろ4文字が下付きの文字列 */ spannable = factory.newSpannable(textView[1].getText()); // 後ろ4文字を下付き文字にする spannable.setSpan( subscript, textView[1].getText().length() - 4, textView[1].getText().length(), spannable.getSpanFlags(subscript) ); // 後ろ4文字のXのスケールを0.5倍する spannable.setSpan( scaleX, textView[1].getText().length() - 4, textView[1].getText().length(), spannable.getSpanFlags(scaleX) ); textView[1].setText(spannable, TextView.BufferType.SPANNABLE); /* 後ろ4文字が上付きの文字列 */ spannable = factory.newSpannable(textView[2].getText()); // 後ろ4文字を上付き文字にする spannable.setSpan( superscript, textView[2].getText().length() - 4, textView[2].getText().length(), spannable.getSpanFlags(superscript) ); // 後ろ4文字のサイズを0.5倍する spannable.setSpan( relative, textView[2].getText().length() - 4, textView[2].getText().length(), spannable.getSpanFlags(relative) ); textView[2].setText(spannable, TextView.BufferType.SPANNABLE); /* URL文字列 */ spannable = factory.newSpannable(textView[3].getText()); // 0からテキストの長さ分までURLタイプにする spannable.setSpan( url, 0, textView[3].getText().length(), spannable.getSpanFlags(url) ); textView[3].setText(spannable, TextView.BufferType.SPANNABLE); textView[3].setOnClickListener(new OnClickListener() { public void onClick(View v) { // URLを開く url.onClick(textView[3]); } }); } }プログラムを実行すると...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/text/Spannable.html
http://developer.android.com/intl/ja/reference/android/text/style/CharacterStyle.html
Menu を使ってみた
Menu は
さらに、Activity クラスの
というわけで、Menu をいじってみた
サンプルプログラム
プログラムを実行すると...
SubMenu は...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/view/Menu.html
http://developer.android.com/intl/ja/reference/android/app/Activity.html
android.view.Menuを使用します
さらに、Activity クラスの
- public boolean onCreateOptionsMenu(Menu menu)
- public boolean onPrepareOptionsMenu(Menu menu)
- public boolean onOptionsItemSelected(MenuItem item)
- public boolean onMenuOpened(int featureId, Menu menu)
というわけで、Menu をいじってみた
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MenuTest extends Activity { private static final int MENU_ID1 = Menu.FIRST; private static final int MENU_ID2 = Menu.FIRST + 1; private static final int MENU_ID3 = Menu.FIRST + 2; private static final int SUBMENU_ID1 = Menu.FIRST + 21; private static final int SUBMENU_ID2 = Menu.FIRST + 22; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((Button) findViewById(R.id.Button)).setOnClickListener( new OnClickListener() { public void onClick(View v) { // Menu の表示 openOptionsMenu(); } } ); } // Option Menu が最初に表示される時に1度だけ呼び出される @Override public boolean onCreateOptionsMenu(Menu menu) { boolean ret = super.onCreateOptionsMenu(menu); // Menu にアイテムを追加 menu.add(Menu.NONE, MENU_ID1, Menu.NONE, "Menu1"); // Menu に Icon 付きアイテムを追加 menu.add(Menu.NONE, MENU_ID2, Menu.NONE, "Menu2").setIcon(R.drawable.icon); // SubMenu を追加 SubMenu sMenu = menu.addSubMenu(Menu.NONE, MENU_ID3, 3, "Menu3"); sMenu.add(Menu.NONE, SUBMENU_ID1, Menu.NONE, "SubMenu1"); sMenu.add(Menu.NONE, SUBMENU_ID2, Menu.NONE, "SubMenu2"); // Menu にショートカットキーを設定 menu.findItem(MENU_ID1).setAlphabeticShortcut('a'); menu.findItem(MENU_ID2).setAlphabeticShortcut('1'); menu.findItem(MENU_ID3).setAlphabeticShortcut('s'); return ret; } // Option Menu が表示される時の動作 @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } // Option Menu のアイテムが選択された時の動作 @Override public boolean onOptionsItemSelected(MenuItem item) { boolean ret = super.onOptionsItemSelected(item); // 選ばれたアイテムの ID を取得 switch(item.getItemId()) { case MENU_ID1: // Menu1 return true; case MENU_ID2: // Menu2 return true; case SUBMENU_ID1: // Submenu1 return true; default: } return ret; } // Option Menu が開かれた時の動作 @Override public boolean onMenuOpened(int featureId, Menu menu) { return super.onMenuOpened(featureId, menu); } }
プログラムを実行すると...
SubMenu は...
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/view/Menu.html
http://developer.android.com/intl/ja/reference/android/app/Activity.html
EditText を使ってみた
EditText は
というわけで, EditText を使ってみた
サンプルプログラム
InputType には
詳しくは InputTypeクラス を参照してください
XMLリソースで指定することもできます
XMLリソース
XMLリソースで
InputTypeを指定するときは android:InputType を使います
プログラムを実行すると...
こんな感じ!
また、ヒントは
こんな感じで表示されます!
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/EditText.html
java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.EditTextを使います
というわけで, EditText を使ってみた
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.text.InputType; import android.widget.EditText; public class EditTextTest extends Activity { EditText editText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edittexttest); editText = (EditText) findViewById(R.id.EditText01); // EditText にテキストを設定 editText.setText("EditTextTest"); // EditText のインプットタイプを設定 editText.setInputType(InputType.TYPE_CLASS_TEXT); // EditText の最大行の設定 editText.setMaxLines(1); // EditText が空のときに表示させるヒントを設定 editText.setHint("This is Hint"); // EditText のカーソル位置を設定 editText.setSelection(3); // EditText のテキストを全選択 // editText.selectAll(); // EditText のテキストを取得 String str = editText.getText().toString(); } }
InputType には
- 数字入力
- アドレス入力
- パスワード入力
- オートコンプリート
- 入力不可 etc...
詳しくは InputTypeクラス を参照してください
XMLリソースで指定することもできます
XMLリソース
<EditText android:hint="This is Hint" android:id="@+id/EditText" android:inputType="text" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="EditTextTest"> </EditText>
XMLリソースで
InputTypeを指定するときは android:InputType を使います
プログラムを実行すると...
こんな感じ!
また、ヒントは
こんな感じで表示されます!
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/EditText.html
ScrollView を使ってみた
ScrollView を使うには
というわけで、ScrollView をいじってみた
サンプルプログラム
ScrollView は1つしか View を設定できないので LinearLayout などにまとめる必要があります XMLでまとめて設定することもできます XMLリソース
プログラムを実行すると...
こんな感じ!
右にスクロールバーが表示されて、上下に続きがあると少し暗くなっています
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/ScrollView.html
java.lang.Object ↳ android.view.View ↳ android.view.ViewGroup ↳ android.widget.FrameLayout ↳ android.widget.ScrollViewを使います
というわけで、ScrollView をいじってみた
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ScrollView; public class ScrollViewTest extends Activity { ScrollView scrollView; LinearLayout linearLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); scrollView = new ScrollView(this); linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); for (int i = 0; i < 12; i++) { Button button = new Button(this); button.setText("Button" + (i+1)); linearLayout.addView(button); } // ScrollView に View を追加 scrollView.addView(linearLayout); setContentView(scrollView); } }
ScrollView は1つしか View を設定できないので LinearLayout などにまとめる必要があります XMLでまとめて設定することもできます XMLリソース
<ScrollView android:id="@+id/ScrollView" android:layout_height="fill_parent" android:layout_width="fill_parent"> <LinearLayout android:id="@+id/LinearLayout" android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"> <!-- 追加したいView --> <Button .../> ・ ・ ・ </LinearLayout> </ScrollView>
プログラムを実行すると...
こんな感じ!
右にスクロールバーが表示されて、上下に続きがあると少し暗くなっています
参考サイト
http://developer.android.com/intl/ja/reference/android/widget/ScrollView.html
SurfaceView を使ってみた
SurfaceView は
また、Surfaceの変更などを取得するために
SurfaceHolder.Callback
を使用します
このインターフェースは
というわけで、SurfaceView をいじってみた
サンプルプログラム
プログラムを実行すると...
こんな感じ!(上:アンチエイリアスなし, 下:あり)
アンチエイリアスは時間がかかるが場合によってはかけた方が良さそう
参考サイト
http://developer.android.com/intl/ja/reference/android/view/SurfaceView.html
http://developer.android.com/intl/ja/reference/android/view/SurfaceHolder.Callback.html
java.lang.Object ↳ android.view.View ↳ android.view.SurfaceViewを使用します
また、Surfaceの変更などを取得するために
SurfaceHolder.Callback
を使用します
このインターフェースは
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
- public void surfaceCreated(SurfaceHolder holder)
- public void surfaceDestroyed(SurfaceHolder holder)
というわけで、SurfaceView をいじってみた
サンプルプログラム
import android.app.Activity; import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; public class SurfaceViewTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new SurfaceTestView(this)); } class SurfaceTestView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private Thread thread; private BitmapDrawable bitmapDrawable; public SurfaceTestView(Context context) { super(context); // SurfaceHolder の取得 SurfaceHolder holder = getHolder(); // SurfaceHolder に コールバックを設定 holder.addCallback(this); holder.setFixedSize(getWidth(), getHeight()); // フォーカスをあてる setFocusable(true); bitmapDrawable = new BitmapDrawable( context.getResources(), BitmapFactory.decodeResource( context.getResources(), R.drawable.icon) ); } // Surface が変更されたときの動作 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } // Surface が作成されたときの動作 public void surfaceCreated(SurfaceHolder holder) { thread = new Thread(this); thread.start(); } // Surface が削除されたときの動作 public void surfaceDestroyed(SurfaceHolder holder) { thread = null; } public void run() { while (thread != null) { // 描画の開始 Canvas canvas = getHolder().lockCanvas(); draw(canvas); // 描画の終了 getHolder().unlockCanvasAndPost(canvas); } } @Override public void draw(Canvas canvas) { // 現在の状態を保存 canvas.save(); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setTextSize(32); bitmapDrawable.setBounds(0, 0, 96, 96); bitmapDrawable.draw(canvas); canvas.drawText("SurfaceViewTest", 0, 128, paint); paint.setAntiAlias(true); bitmapDrawable.setBounds(0, 160, 96, 256); bitmapDrawable.draw(canvas); canvas.drawText("SurfaceViewTest2", 0, 288, paint); // 現在の状態の変更 canvas.restore(); } } }
プログラムを実行すると...
こんな感じ!(上:アンチエイリアスなし, 下:あり)
アンチエイリアスは時間がかかるが場合によってはかけた方が良さそう
参考サイト
http://developer.android.com/intl/ja/reference/android/view/SurfaceView.html
http://developer.android.com/intl/ja/reference/android/view/SurfaceHolder.Callback.html
Drawable を使ってみた
Drawableクラスは abstract class で
サブクラスには
今回は BitmapDrawable クラスを使ってみた
BitmapDrawable は
というわけで BitmapDrawable をいじってみた
サンプルプログラム
プログラムを実行してみると...
こんな感じ!(左:アンチエイリアスあり, 右:なし)
この画像だとアンチエイリアスの違いはよく分からないですね
状況によって使い分けるのが良さそう
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/drawable/Drawable.html
http://developer.android.com/intl/ja/reference/android/graphics/drawable/BitmapDrawable.html
サブクラスには
- BitmapDrawable
- ColorDrawable
- RotateDrawable
- ScaleDrawable etc...
今回は BitmapDrawable クラスを使ってみた
BitmapDrawable は
java.lang.Object ↳ android.graphics.drawable.Drawable ↳ android.graphics.drawable.BitmapDrawableを使用します
というわけで BitmapDrawable をいじってみた
サンプルプログラム
import android.app.Activity; import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.Gravity; import android.view.View; public class DrawableTest extends Activity { BitmapDrawable bitmapDrawable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new DrawableTestView(this)); } class DrawableTestView extends View { public DrawableTestView(Context context) { super(context); // BitmapDrawable を作成 bitmapDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.icon); } @Override public void onDraw(Canvas canvas) { // BitmapDrawable の範囲を設定 bitmapDrawable.setBounds(0, 0, 48, 48); // BitmapDrawable の描画 bitmapDrawable.draw(canvas); // BitmapDrawable のアルファ値を設定 bitmapDrawable.setAlpha(128); bitmapDrawable.setBounds(48, 0, 96, 48); bitmapDrawable.draw(canvas); bitmapDrawable.setAlpha(255); // BitmapDrawable にアンチエイリアスを設定 bitmapDrawable.setAntiAlias(true); bitmapDrawable.setBounds(0, 48, 240, 288); bitmapDrawable.draw(canvas); bitmapDrawable.setAntiAlias(false); bitmapDrawable.setBounds(240, 48, 480, 288); bitmapDrawable.draw(canvas); bitmapDrawable.setBounds(0, 0, getWidth(), getHeight()); // BitmapDrawable にグラビティを設定 bitmapDrawable.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); bitmapDrawable.draw(canvas); } } }
プログラムを実行してみると...
こんな感じ!(左:アンチエイリアスあり, 右:なし)
この画像だとアンチエイリアスの違いはよく分からないですね
状況によって使い分けるのが良さそう
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/drawable/Drawable.html
http://developer.android.com/intl/ja/reference/android/graphics/drawable/BitmapDrawable.html
Bitmap で Pixel 操作してみた
Bitmap をピクセル単位で操作するには
getPixel(int x, int y)
または
getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)
を使ってPixelを取得、
setPixel(int x, int y, int color)
または
setPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)
で設定します
というわけで、Pixel操作をしてみた
サンプルプログラム
プログラムを実行すると...
こんな感じ!
なんか紫色だと違和感が...
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/Bitmap.html
getPixel(int x, int y)
または
getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)
を使ってPixelを取得、
setPixel(int x, int y, int color)
または
setPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)
で設定します
というわけで、Pixel操作をしてみた
サンプルプログラム
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class BitmapTest2 extends Activity { Bitmap bitmap; int pixels[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new BitmapTest2View(this)); } class BitmapTest2View extends View { public BitmapTest2View(Context context) { super(context); // リソースから Bitmap を取得 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); // もし編集不可なら、編集可能な Bitmap を複製 if (!bitmap.isMutable()) { bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); } int width = bitmap.getWidth(); int height = bitmap.getHeight(); pixels = new int[width * height]; // Bitmap から Pixel を取得 bitmap.getPixels(pixels, 0, width, 0, 0, width, height); // Pixel 操作部分 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int pixel = pixels[x + y * width]; pixels[x + y * width] = Color.argb( Color.alpha(pixel), Color.green(pixel), Color.blue(pixel), Color.red(pixel) ); } } // Bitmap に Pixel を設定 bitmap.setPixels(pixels, 0, width, 0, 0, width, height); } @Override public void onDraw(Canvas canvas) { // Bitmap の描画 canvas.drawBitmap(bitmap, 0, 0, new Paint()); } } }
プログラムを実行すると...
こんな感じ!
なんか紫色だと違和感が...
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/Bitmap.html
Fullscreen にしてみた
Window を フルスクリーンにするには
Windowのフラグに
WindowManager.LayoutParams.FLAG_FULLSCREEN
を設定します
また、タイトルバーを消すには
requestWindowFeature(Window.FEATURE_NO_TITLE);
を実行します
サンプルプログラム
setContextView より前に書かないとエラーになります
プログラムを実行すると...
こんな感じ!
Windowのフラグに
WindowManager.LayoutParams.FLAG_FULLSCREEN
を設定します
また、タイトルバーを消すには
requestWindowFeature(Window.FEATURE_NO_TITLE);
を実行します
サンプルプログラム
import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class FullScreenTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Window をフルスクリーンにする getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); // Title Bar を非表示にする requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); } }
setContextView より前に書かないとエラーになります
プログラムを実行すると...
こんな感じ!
Bitmap を使ってみた
Bitmap は
また外部ファイルやリソースを読み込むために
例えば drawable に入れてあるリソースを Bitmap として使うには
BitmapFactory クラスで変換して利用する
その後 Bitmap クラスを用いて大きさを変換させたり
回転させたり...
というわけで、Bitmap をいじってみた
サンプルプログラム
プログラムを実行すると...
こんな感じ!
ちなみに 引数の filter の部分(最後の引数)の値を変えて比較してみると...
こんな感じに! (左:true, 右:false)
filter をかけるとアンチエイリアスがかかっているっぽい
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/Bitmap.html
http://developer.android.com/intl/ja/reference/android/graphics/BitmapFactory.html
java.lang.Object ↳ android.graphics.Bitmapを使用します
また外部ファイルやリソースを読み込むために
java.lang.Object ↳ android.graphics.BitmapFactoryを使用します
例えば drawable に入れてあるリソースを Bitmap として使うには
BitmapFactory クラスで変換して利用する
その後 Bitmap クラスを用いて大きさを変換させたり
回転させたり...
というわけで、Bitmap をいじってみた
サンプルプログラム
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class BitmapTest extends Activity { private static final int NUM = 4; Bitmap bitmap[]; Matrix matrix; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new BitmapTestView(this)); } class BitmapTestView extends View { public BitmapTestView(Context context) { super(context); bitmap = new Bitmap[NUM]; // リソースから Bitmap を取得 bitmap[0] = BitmapFactory.decodeResource(getResources(), R.drawable.icon); // Bitmap のサイズの取得 int width = bitmap[0].getWidth(); int height = bitmap[0].getHeight(); // 45°回転させた Bitmap を作成 matrix = new Matrix(); matrix.postRotate(45.0f); // 回転させる角度を指定 bitmap[1] = Bitmap.createBitmap(bitmap[0], 0, 0, width, height, matrix, true); // Bitmap のスケールを指定して作成 // この場合 (x * 0.5) × (y * 2) の大きさの画像になる matrix = new Matrix(); matrix.postScale(0.5f, 2.0f); // スケールを指定 bitmap[2] = Bitmap.createBitmap(bitmap[0], 0, 0, width, height, matrix, true); // Bitmap の大きさを指定して作成 // この場合 80 × 48 の大きさの画像になる bitmap[3] = Bitmap.createScaledBitmap(bitmap[0], 80, 48, true); } @Override public void onDraw(Canvas canvas) { Paint paint = new Paint(); for (int i = 0; i < NUM; i++) { // Bitmap の描画 canvas.drawBitmap(bitmap[i], i * 80, 0, paint); } } } }
プログラムを実行すると...
こんな感じ!
ちなみに 引数の filter の部分(最後の引数)の値を変えて比較してみると...
こんな感じに! (左:true, 右:false)
filter をかけるとアンチエイリアスがかかっているっぽい
参考サイト
http://developer.android.com/intl/ja/reference/android/graphics/Bitmap.html
http://developer.android.com/intl/ja/reference/android/graphics/BitmapFactory.html
TimePickerDialog を使ってみた
TimePickerDialog は
というわけで、TimePickerDialog をいじってみた
サンプルプログラム
プログラムを実行すると...
AM/PM表示のとき
こんな感じ!
java.lang.Object ↳ android.app.Dialog ↳ android.app.AlertDialog ↳ android.app.TimePickerDialogを使います
というわけで、TimePickerDialog をいじってみた
サンプルプログラム
import java.util.Calendar; import android.app.Activity; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.DialogInterface; import android.os.Bundle; import android.widget.TextView; import android.widget.TimePicker; public class TimePickerDialogTest extends Activity { final Calendar calendar = Calendar.getInstance(); // カレンダーから現在の '時' を取得 int mHour = calendar.get(Calendar.HOUR_OF_DAY); // カレンダーから現在の '分' を取得 int mMinute = calendar.get(Calendar.MINUTE); TimePickerDialog timePickerDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // TImePickerDialog の時刻が変更された時に呼び出されるコールバックを登録 TimePickerDialog.OnTimeSetListener listener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; // '時' を取得 mMinute = minute; // '分' を取得 } }; // TimePickerDialog の作成 timePickerDialog = new TimePickerDialog( this, // 第1引数 : Context listener, // 第2引数 : TimePickerDialog.OnTimeSetListener mHour, // 第3引数 : 時 mMinute, // 第4引数 : 分 true // 第5引数 : 24時間表示(true)かAM/PM表示(false)か ); // Dialog の Positive Button を設定 timePickerDialog.setButton( DialogInterface.BUTTON_POSITIVE, "Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Positive Button がクリックされた時の動作 } } ); // Dialog の Negative Button を設定 timePickerDialog.setButton( DialogInterface.BUTTON_NEGATIVE, "Negative", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Negative Button がクリックされた時の動作 } } ); // Dialog の Neutral Button を設定 timePickerDialog.setButton( DialogInterface.BUTTON_NEUTRAL, "Neutral", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Neutral Button がクリックされた時の動作 } } ); // TimePickerDialog の表示 timePickerDialog.show(); } }
プログラムを実行すると...
AM/PM表示のとき
こんな感じ!
ProgressDialog を使ってみた
ProgressDilaog は
というわけで、ProgressDialog をいじってみた
サンプルプログラム
プログラムを実行すると...
円スタイルのとき
こんな感じ!
java.lang.Object ↳ android.app.Dialog ↳ android.app.AlertDialog ↳ android.app.ProgressDialogを使います
というわけで、ProgressDialog をいじってみた
サンプルプログラム
import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; public class ProgressDialogTest extends Activity implements Runnable { ProgressDialog progressDialog; Thread thread; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.progressdialogtest); progressDialog = new ProgressDialog(this); // ProgressDialog のタイトルを設定 progressDialog.setTitle("Title"); // ProgressDialog のメッセージを設定 progressDialog.setMessage("Message"); // ProgressDialog の確定(false)/不確定(true)を設定します progressDialog.setIndeterminate(false); // ProgressDialog のスタイルを水平スタイルに設定 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 円スタイルの場合 // progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // ProgressDialog の最大値を設定 (水平の時) progressDialog.setMax(100); // ProgressDialog の初期値を設定 (水平の時) progressDialog.incrementProgressBy(0); // ProgressDialog のセカンダリ値を設定 (水平の時) progressDialog.incrementSecondaryProgressBy(50); // ProgressDialog のキャンセルが可能かどうか progressDialog.setCancelable(false); // ProgressDialog のキャンセルされた時に呼び出されるコールバックを登録 progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface dialog) { // Thread を停止 stop(); } }); // Start ボタン findViewById(R.id.ProgressDialogTest_Button).setOnClickListener( new View.OnClickListener() { public void onClick(View view) { // ProgressDialog を表示 progressDialog.show(); // Thread を起動 init(); start(); } } ); // ProgressDialog の Cancel ボタン progressDialog.setButton( DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // ProgressDialog をキャンセル dialog.cancel(); } } ); } /** Runnable のプログラム */ public void init() { thread = null; } public void start() { if (thread == null) { thread = new Thread(this); thread.start(); } } public void run() { int count = 0; Thread thisThread = Thread.currentThread(); while (thisThread == thread) { // 100ms毎に Progress Bar を進める progressDialog.setProgress(count++); try { thread.sleep(100); } catch (InterruptedException e) { } if (count >= progressDialog.getMax()) { // Progress が完了 break; } } // Progress Dialog を消す progressDialog.dismiss(); } public void stop() { thread = null; } }
プログラムを実行すると...
円スタイルのとき
こんな感じ!
DatePickerDialog を使ってみた
DatePickerDialog は
というわけで、DatePickerDialog をいじってみた
サンプルプログラム
プログラムを実行すると...
こんな感じ!
java.lang.Object ↳ android.app.Dialog ↳ android.app.AlertDialog ↳ android.app.DatePickerDialogを使います
というわけで、DatePickerDialog をいじってみた
サンプルプログラム
import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.content.DialogInterface; import android.os.Bundle; import android.widget.DatePicker; public class DatePickerDialogTest extends Activity { final Calendar calendar = Calendar.getInstance(); // カレンダーから現在の '年' を取得 int mYear = calendar.get(Calendar.YEAR); // カレンダーから現在の '月' を取得 int mMonth = calendar.get(Calendar.MONTH); // カレンダーから現在の '日' を取得 int mDay = calendar.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // DatePickerDialog の日付が変更されたときに呼び出されるコールバックを登録 DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() { public void onDateSet( DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; // '年' を取得 mMonth = monthOfYear; // '月' を取得 mDay = dayOfMonth; // '日' を取得 } }; // DatePickerDialog の作成 datePickerDialog = new DatePickerDialog( this, // 第1引数 : Context listener, // 第2引数 : DatePickerDialog.OnDateSetListener mYear, // 第3引数 : 年 mMonth, // 第4引数 : 月 mDay // 第5引数 : 日 ); // Dialog の Positive Button を設定 datePickerDialog.setButton( DialogInterface.BUTTON_POSITIVE, "Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Positive Button がクリックされた時の動作 } } ); // Dialog の Negative Button を設定 datePickerDialog.setButton( DialogInterface.BUTTON_NEGATIVE, "Negative", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Negative Button がクリックされた時の動作 } } ); // Dialog の Neutral Button を設定 datePickerDialog.setButton( DialogInterface.BUTTON_NEUTRAL, "Neutral", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Neutral Button がクリックされた時の動作 } } ); // DatePickerDialog の表示 datePickerDialog.show(); } }
プログラムを実行すると...
こんな感じ!
登録:
投稿 (Atom)