書籍「やさしい教材 Android 教室」のサンプルプログラム集 理工学図書 無料でご利用できます。購入された方には感謝申し上げます。 小さな出版社ですが今後ともよろしくお願いします。 Android2.3.3(API 10)使用時の「やさしい教材 Android 教室」サンプルプログラムをまとめた pdf です。書籍ページ番号にそったサンプルプログラムになっております。短いサンプルプログラムは 省略してあります。以下の内容をコピーして eclipse でお使いください。 ピアノの鍵盤で音をだす場合は Android の最新版を利用すると音がきれいにでますので挑戦してく ださい。 P25 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="320dp" android:layout_height="320dp" android:text="TextView" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="160dp" android:layout_height="wrap_content" android:text="戻る" /> <Button android:id="@+id/button2" android:layout_width="160dp" android:layout_height="wrap_content" android:text="次へ" /> </LinearLayout> </LinearLayout> P27 package com.example.androidtest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AndroidTestActivity extends Activity implements OnClickListener{ //***************************************** // String[ ] mon={"mon1.txt","mon2.txt"}; // InputStream is=assets.open(mon[i]); //***************************************** String[ ] mon={"mon1","mon2","mon3"}; int i=0; Button b1,b2; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_test); tv = (TextView)findViewById(R.id.textView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); // tv.setText("assets デレクトリから読み込む"); // b2.setText("assets デレクトリから読み込む"); tv.setTextSize(18.0f);//文字の大きさ tv.setMaxLines(10);//10 行分を表示 b1.setOnClickListener(this); b2.setOnClickListener(this); } public void onClick(View v){ switch(v.getId( )){ case R.id.button2: Toast.makeText(AndroidTestActivity.this, "「次へ」ボタンを押しました", Toast.LENGTH_ SHORT).show( ); TextFileRead( ); break; case R.id.button1: Toast.makeText(AndroidTestActivity.this, "「戻る」ボタンを押しましたが戻りません", Toast.LENGTH_SHORT).show( ); break; } i++; } public void TextFileRead( ){ try{ AssetManager assets=getResources( ).getAssets( ); StringBuilder sb =new StringBuilder( ); if(i>=3)i=0; InputStream is=assets.open(mon[i]+".txt"); BufferedReader br=new BufferedReader( new InputStreamReader(is,"UTF-8")); String str; while((str=br.readLine( )) != null){ sb.append(str+"¥n"); } br.close( ); tv.setText(sb); }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_test, menu); return true; } } P52 package com.example.androidtest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AndroidTestActivity extends Activity implements OnClickListener{ String[ ] mon={"mon1","mon2","mon3"}; int i=0; int flag=0; //今回の追加文 boolean bstart=false; //今回の追加文 int currentx=0; //今回の追加文 Button b1,b2; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_test); tv = (TextView)findViewById(R.id.textView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); tv.setTextSize(18.0f);//文字の大きさ tv.setMaxLines(10);//10 行分を表示 b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1://「戻る」ボタン if(bstart==false||currentx==0){ //今回の追加文 Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; //今回の追加文 }else { //今回の追加文 i=currentx-1; //今回の追加文 TextFileRead( ); //今回の追加文 currentx=i; //今回の追加文 flag=1; //今回の追加文 } //今回の追加文 break; case R.id.button2://「次へ」ボタン bstart=true; //今回の追加文 if(i>=mon.length) i=0; //今回の変更文 if(flag==1) i=currentx+1; //今回の追加文 TextFileRead( ); currentx=i; //今回の追加文 flag=0; //今回の追加文 break; } i++; } public void TextFileRead( ){ //TextFileRead( )メソッドは変更なし } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_test, menu); return true; } } P58 package com.example.androidtest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AndroidTestActivity extends Activity implements OnClickListener{ String[ ] mon={"mon1","mon2","mon3"}; int[ ] kaitou={3,2,3};//今回の追加文 int i=0; int flag=0; boolean bstart=false; int currentx=0; Button b1,b2,b3,b4,b5,b6;//今回の追加文 TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_test); tv = (TextView)findViewById(R.id.textView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); b3 = (Button)findViewById(R.id.button3);//今回の追加文 b4 = (Button)findViewById(R.id.button4);//今回の追加文 b5 = (Button)findViewById(R.id.button5);//今回の追加文 b6 = (Button)findViewById(R.id.button6);//今回の追加文 tv.setTextSize(18.0f);//文字の大きさ tv.setMaxLines(10);//10 行分を表示 b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this);//今回の追加文 b4.setOnClickListener(this);//今回の追加文 b5.setOnClickListener(this);//今回の追加文 b6.setOnClickListener(this);//今回の追加文 } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: if(bstart==false||currentx==0){ Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; }else { i=currentx-1; TextFileRead( ); // Log.i("i1="," "+i); currentx=i; flag=1; } break; case R.id.button2: bstart=true; if(i>=mon.length){ i=0; } if(flag==1){ i=currentx+1; } TextFileRead( ); // Log.i("i2="," "+i); currentx=i; flag=0; break; case R.id.button3://この行から button6 までが追加文 // Log.i("i3="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==1){ Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button4: // Log.i("i4="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==2){ Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button5: // Log.i("i5="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==3){ Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button6: // Log.i("i6="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==4){ Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; } i++; } public void TextFileRead( ){ try{ AssetManager assets=getResources( ).getAssets( ); StringBuilder sb =new StringBuilder( ); InputStream is=assets.open(mon[i]+".txt"); BufferedReader br=new BufferedReader( new InputStreamReader(is,"UTF-8")); String str; while((str=br.readLine( )) != null){ sb.append(str+"¥n"); } br.close( ); tv.setText(sb); }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_test, menu); return true; } } P67 public void TextFileRead( ){ try{ //******************* 正常に動作 SD カード保存1 **************************** StringBuilder sb =new StringBuilder( ); String sdpath=Environment.getExternalStorageDirectory( ).getPath( ); FileInputStream is = new FileInputStream(sdpath+"/"+mon[i]+".txt"); BufferedReader br=new BufferedReader( new InputStreamReader(is,"UTF-8")); //***************************************************************************** //******************* 正常に動作 SD カード保存2 **************************** // StringBuilder sb =new StringBuilder( ); // String sdpath=Environment.getExternalStorageDirectory( ).getPath( ); // String filename ="/"+mon[i]+".txt"; // FileReader fr=new FileReader(sdpath+filename); // BufferedReader br=new BufferedReader(fr); //*************************************************************************** //******************* 正常に動作 assets フォルダ保存 ********************** // AssetManager assets=getResources( ).getAssets( ); // StringBuilder sb =new StringBuilder( ); // InputStream is=assets.open(mon[i]+".txt"); // BufferedReader br=new BufferedReader( // new InputStreamReader(is,"UTF-8")); //************************************************************************** String str; while((str=br.readLine( )) != null){ sb.append(str+"¥n"); } br.close( ); tv.setText(sb); }catch(IOException e){ } } P70 の8の解答 package com.example.androidtest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AndroidTestActivity extends Activity implements OnClickListener{ String[ ] mon={"mon1","mon2","mon3","mon4"}; int [ ] kaitou={3,2,3,4}; int [ ] seikai={0,0,0,0}; int sum=0; int i=0; int flag=0; boolean bstart=false; int currentx=0; Button b1,b2,b3,b4,b5,b6,b7; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_test); tv = (TextView)findViewById(R.id.textView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); b3 = (Button)findViewById(R.id.button3); b4 = (Button)findViewById(R.id.button4); b5 = (Button)findViewById(R.id.button5); b6 = (Button)findViewById(R.id.button6); b7 = (Button)findViewById(R.id.button7); tv.setTextSize(18.0f);//文字の大きさ tv.setMaxLines(10);//10 行分を表示 b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); b4.setOnClickListener(this); b5.setOnClickListener(this); b6.setOnClickListener(this); b7.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: if(bstart==false||currentx==0){ Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; }else { i=currentx-1; TextFileRead( ); // Log.i("i1="," "+i); currentx=i; flag=1; } break; case R.id.button2: bstart=true; if(i>=mon.length){ i=0; } if(flag==1){ i=currentx+1; } TextFileRead( ); // Log.i("i2="," "+i); currentx=i; flag=0; break; case R.id.button3: // Log.i("i3="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==1){ seikai[i]=1; Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button4: // Log.i("i4="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==2){ seikai[i]=1; Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button5: // Log.i("i5="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==3){ seikai[i]=1; Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button6: // Log.i("i6="," "+i); if(bstart==false){ i=-1; Toast.makeText(AndroidTestActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==4){ seikai[i]=1; Toast.makeText(AndroidTestActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidTestActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button7: for(int n=0;n<mon.length;n++){ sum=sum+seikai[n]; } Toast.makeText(AndroidTestActivity.this, "正解"+sum+"/"+mon.length, Toast.LENGTH_SHORT).show( ); for(int n=0;n<mon.length;n++){ seikai[n]=0; } sum=0; break; } i++; } public void TextFileRead( ){ try{ // AssetManager assets=getResources( ).getAssets( ); AssetManager assets=getAssets( );//どちらでも動作可 StringBuilder sb =new StringBuilder( ); InputStream is=assets.open(mon[i]+".txt"); BufferedReader br=new BufferedReader( new InputStreamReader(is,"UTF-8")); String str; while((str=br.readLine( )) != null){ sb.append(str+"¥n"); } br.close( ); tv.setText(sb); }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_test, menu); return true; } } P79 package com.example.androidimage; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class AndroidImageActivity extends Activity implements OnClickListener{ int [ ] mon={R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4, R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8}; Button b1,b2; int i=0; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: break; case R.id.button2: if(i>=8)i=1; iv.setImageResource(mon[i]); break; } i++; } } P82 //インポート文はその1と同じです public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img1","img2","img3","img4", "img5","img6","img7","img8"}; int i=0; Button b1,b2; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: break; case R.id.button2: if(i>=8)i=1; iv.setImageResource(getResources( ).getIdentifier(mon[i], "drawable", "com.example.androidimage")); break; } i++; } } P83 package com.example.androidimage; import java.io.BufferedInputStream; import java.io.IOException; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; //import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img1","img2","img3","img4", "img5","img6","img7","img8"}; int i=0; Button b1,b2; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: break; case R.id.button2: if(i>=8)i=1; ImageFileRead( ); break; } i++; } public void ImageFileRead( ){ try{ // AssetManager assets=getResources( ).getAssets( ); AssetManager assets=getAssets( );//どちらでも動作します。 BufferedInputStream is=new BufferedInputStream(assets.open(mon[i]+".jpg")); Bitmap bm=BitmapFactory.decodeStream(is); iv.setImageBitmap(bm); is.close( ); }catch(IOException e){ } } } P85 package com.example.androidimage; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img1","img2","img3","img4","img5","img6","img7","img8"}; int i=0; Button b1,b2; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: break; case R.id.button2: if(i>=8)i=1; ImageFileRead( ); break; } i++; } public void ImageFileRead( ){ try{ String sdpath=Environment.getExternalStorageDirectory( ).getPath( ); FileInputStream fis = new FileInputStream(sdpath+"/"+mon[i]+".jpg"); //FileInputStream fis = new FileInputStream(sdpath+"/myapp/"+mon[i]+".jpg"); BufferedInputStream bis=new BufferedInputStream(fis); Bitmap bm=BitmapFactory.decodeStream(bis); iv.setImageBitmap(bm); fis.close( ); }catch(IOException e){ } } } P87 package com.example.androidimage; import java.io.BufferedInputStream; //import java.io.BufferedReader; //import java.io.FileInputStream; import java.io.IOException; //import java.io.InputStream; //import java.io.InputStreamReader; import android.os.Bundle; //import android.os.Environment; import android.app.Activity; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img1","img2","img3","img4","img5","img6","img7","img8"};//写真 int i=0,flag=0,currentx=0; boolean bstart=false; Button b1,b2; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: if(bstart==false||currentx==0){ Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; }else { i=currentx-1; ImageFileRead( ); currentx=i; flag=1; } break; case R.id.button2: bstart=true; if(i>=mon.length){ i=0; } if(flag==1){ i=currentx+1; } ImageFileRead( ); currentx=i; flag=0; break; } i++; } public void ImageFileRead( ){ try{ //******** assets フォルダに保存された画像ファイルの読み込み ******* // AssetManager assets=getResources( ).getAssets( ); AssetManager assets=getAssets( );//どちらでも動作する。 BufferedInputStream is=new BufferedInputStream(assets.open(mon[i]+".jpg")); Bitmap bm=BitmapFactory.decodeStream(is); iv.setImageBitmap(bm); is.close( ); //******************************************************************** }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_image, menu); return true; } } P91 package com.example.androidimage; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img01","img02","img03","img04","img05","img06","img07","img08"}; int i=0,flag=0,currentx=0; boolean bstart=false; Button b1,b2; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: if(bstart==false||currentx==0){ Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; }else { i=currentx-1; ImageFileRead( ); currentx=i; flag=1; } break; case R.id.button2: bstart=true; if(i>=mon.length){ i=0; } if(flag==1){ i=currentx+1; } ImageFileRead( ); currentx=i; flag=0; break; } i++; } public void ImageFileRead( ){ try{ //******** SD カードに保存された画像ファイルの読み込み **************** String sdpath=Environment.getExternalStorageDirectory( ).getPath( ); FileInputStream fis = new FileInputStream(sdpath+"/"+mon[i]+".jpg"); // FileInputStream fis = new FileInputStream(sdpath+"/myapp/"+mon[i]+".jpg"); BufferedInputStream bis=new BufferedInputStream(fis); Bitmap bm=BitmapFactory.decodeStream(bis); iv.setImageBitmap(bm); fis.close( ); //********************************************************************* }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_image, menu); return true; } } P95 package com.example.androidimage; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class AndroidImageActivity extends Activity implements OnClickListener{ String[ ] mon={"img01","img02","img03","img04","img05","img06","img07","img08"}; int [ ] kaitou={1,4,2,4,2,3,3,3}; int [ ] seikai={0,0,0,0,0,0,0,0}; int sum=0; int i=0,flag=0,currentx=0; boolean bstart=false; Button b1,b2,b3,b4,b5,b6,b7; ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image); iv = (ImageView)findViewById(R.id.imageView1); b1 = (Button)findViewById(R.id.button1); b2 = (Button)findViewById(R.id.button2); b3 = (Button)findViewById(R.id.button3); b4 = (Button)findViewById(R.id.button4); b5 = (Button)findViewById(R.id.button5); b6 = (Button)findViewById(R.id.button6); b7 = (Button)findViewById(R.id.button7); iv.setImageResource(R.drawable.img0); b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); b4.setOnClickListener(this); b5.setOnClickListener(this); b6.setOnClickListener(this); b7.setOnClickListener(this); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: if(bstart==false||currentx==0){ Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); i=-1; }else { i=currentx-1; ImageFileRead( ); currentx=i; flag=1; } break; case R.id.button2: bstart=true; if(i>=mon.length){ i=0; } if(flag==1){ i=currentx+1; } ImageFileRead( ); currentx=i; flag=0; break; case R.id.button3: if(bstart==false){ i=-1; Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==1){ seikai[i]=1; Toast.makeText(AndroidImageActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidImageActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button4: if(bstart==false){ i=-1; Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==2){ seikai[i]=1; Toast.makeText(AndroidImageActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidImageActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button5: if(bstart==false){ i=-1; Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==3){ seikai[i]=1; Toast.makeText(AndroidImageActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidImageActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button6: if(bstart==false){ i=-1; Toast.makeText(AndroidImageActivity.this, "最初は「次へ」", Toast.LENGTH_SHORT).show( ); } else{ i=currentx; if(kaitou[i]==4){ seikai[i]=1; Toast.makeText(AndroidImageActivity.this, "正解", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidImageActivity.this, "残念", Toast.LENGTH_SHORT).show( ); } } break; case R.id.button7: for(int n=0;n<mon.length;n++){ sum=sum+seikai[n]; } Toast.makeText(AndroidImageActivity.this, "正解"+sum+"/"+mon.length, Toast.LENGTH_SHORT).show( ); for(int n=0;n<mon.length;n++){ seikai[n]=0; } sum=0; break; } i++; } public void ImageFileRead( ){ try{ //******** 正常に動作 SD カードに保存された画像ファイルの読み込み **************** String sdpath=Environment.getExternalStorageDirectory( ).getPath( ); FileInputStream fis = new FileInputStream(sdpath+"/"+mon[i]+".jpg"); // FileInputStream fis = new FileInputStream(sdpath+"/myapp/"+mon[i]+".jpg"); BufferedInputStream bis=new BufferedInputStream(fis); Bitmap bm=BitmapFactory.decodeStream(bis); iv.setImageBitmap(bm); fis.close( ); }catch(IOException e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_image, menu); return true; } } P102 package com.example.androidimage3; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class AndroidImage3Activity extends Activity implements OnClickListener { int i = 0; String[ ] str = { "img1", "img2", "img3", "img4", "img5", "img6", "img7", "img8" }; String[ ] str2={"おいしそうなイチゴ", "東京 スカイバス", "青空いっぱいの夏 西三河にて", "河口湖の紅葉回廊", "高台にそびえる建物", "岐阜飛騨白川郷 合掌造り", "カブトムシとスイカ", "京都 嵯峨野トロッコ列車 車窓"}; Timer timer; Button b1,b2; ImageView iv; Handler h = new Handler( ); boolean bFlags[ ]= {false,false,false,false}; boolean bCheckTimer=false; public class MyTask extends TimerTask { @Override public void run( ) { h.post(new Runnable( ) { @Override public void run( ) { if (i >= str.length)i = 0; if(bFlags[0]== true){ iv = (ImageView) findViewById(R.id.imageView1); iv.setImageResource(getResources( ).getIdentifier(str[i], "drawable", "com.example.androidimage3")); Toast.makeText(AndroidImage3Activity.this, str2[i], Toast.LENGTH_SHORT).show( ); Log.i("Runnable="," "+i);//確認用です } i++; }//run( ) });//h.post }//run( ) }//MyTask @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image3); iv=(ImageView)findViewById(R.id.imageView1); b1 = (Button) findViewById(R.id.button1); b2 = (Button) findViewById(R.id.button2); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId( )){ case R.id.button1://スタートボタン //**************************************************** // タイマスケジュールで 5 秒間隔に表示 // if(bCheckTimer==false){ }はスタートボタンを 2 回押しても // タイマは1つしか必要としないので、そのための対策用です //**************************************************** if(bCheckTimer==false){ timer = new Timer( ); timer.schedule(new MyTask( ), 1000, 5000); } bFlags[0]= true; bCheckTimer=true; Toast.makeText(AndroidImage3Activity.this,"開始", Toast.LENGTH_SHORT).show( ); break; case R.id.button2: finish( ); break; }//switch }//public onClick @Override public void onPause( ){ super.onPause( ); Toast.makeText(AndroidImage3Activity.this,"終了", Toast.LENGTH_SHORT).show( ); if(timer != null){ timer.cancel( ); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_image3, menu); return true; } } P105 public class MyTask extends TimerTask { @Override public void run( ) { h.post(new Runnable( ) { @Override public void run( ) { Random rnd=new Random( ); int val=rnd.nextInt(str.length);//str.length=8 val=0~7 if(val>=str.length)val=0; if(bFlags[0]== true){ iv = (ImageView) findViewById(R.id.imageView1); iv.setImageResource(getResources( ).getIdentifier(str[val], "drawable", "com.example.androidimage3")); Toast.makeText(AndroidImage3Activity.this, str2[val], Toast.LENGTH_SHORT).show( ); } i++; }//run( ) });//h.post }//run( ) }//MyTask P109 の3の解答 package com.example.androidimage2; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class AndroidImage2Activity extends Activity implements OnClickListener { int i = 0; String[ ] str = { "img1", "img2", "img3", "img4", "img5", "img6", "img7", "img8" }; String[ ] str2={"おいしそうなイチゴ", "東京 スカイバス", "青空いっぱいの夏 西三河にて", "河口湖の紅葉回廊", "高台にそびえる建物", "岐阜飛騨白川郷 合掌造り", "カブトムシとスイカ", "京都 嵯峨野トロッコ列車 車窓"}; Timer timer; Button b1,b2,b3,b4; ImageView iv; Handler h = new Handler( ); boolean bFlags[ ]= {false,false,false,false}; boolean bCheckTimer=false; public class MyTask extends TimerTask { @Override public void run( ) { h.post(new Runnable( ) { // @Override public void run( ) { if (i >= str.length)i = 0; if(bFlags[0]== true){ iv = (ImageView) findViewById(R.id.imageView1); iv.setImageResource(getResources( ).getIdentifier(str[i], "drawable", "com.example.androidimage2")); Toast.makeText(AndroidImage2Activity.this, str2[i], Toast.LENGTH_SHORT).show( ); } i++; }//run( ) });//h.post }//run( ) }//MyTask @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_image2); iv=(ImageView)findViewById(R.id.imageView1); b1 = (Button) findViewById(R.id.button1); b2 = (Button) findViewById(R.id.button2); b3 = (Button) findViewById(R.id.button3); b4 = (Button) findViewById(R.id.button4); b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); b4.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId( )){ case R.id.button1://スタートボタン //**************************************************** // タイマースケジュールで 5 秒間隔に表示 // if(bCheckTimer==false){ }はスタートボタンを 2 回押しても // タイマーが1つである必要があり、その対策用です。 //**************************************************** if(bCheckTimer==false){ timer = new Timer( ); timer.schedule(new MyTask( ), 1000, 5000); } bFlags[0]= true; bCheckTimer=true; Toast.makeText(AndroidImage2Activity.this,"開始", Toast.LENGTH_SHORT).show( ); break; case R.id.button2: finish( ); break; case R.id.button3://一時停止 if(bFlags[0]== true){ if(bCheckTimer==true ){ timer.cancel( ); bCheckTimer=false; bFlags[2]=true; } }else{ Toast.makeText(AndroidImage2Activity.this,"最初は開始ボタンを押してください", Toast.LENGTH_SHORT).show( ); bFlags[2]=false; } break; case R.id.button4://再開 if(bFlags[2]==true){ if(bCheckTimer==false){ timer = new Timer( ); timer.schedule(new MyTask( ),1000, 5000); bCheckTimer=true; bFlags[2]=false; bFlags[3]=true; } }else if( bFlags[3]==true){ Toast.makeText(AndroidImage2Activity.this,"2 回続けて再開ボタンを押さないでください", Toast.LENGTH_SHORT).show( ); }else if(bFlags[0]==true&&bFlags[2]==false){ Toast.makeText(AndroidImage2Activity.this,"再開ボタンを押さないでください", Toast.LENGTH_SHORT).show( ); }else{ Toast.makeText(AndroidImage2Activity.this,"最初は開始ボタンを押してください", Toast.LENGTH_SHORT).show( ); } break; }//switch }//public onClick @Override public void onPause( ){ super.onPause( ); Toast.makeText(AndroidImage2Activity.this,"終了", Toast.LENGTH_SHORT).show( ); if(timer != null){ timer.cancel( ); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_android_image2, menu); return true; } } P121 package com.example.surfaceviewtest; import android.app.Activity; import android.content.res.Resources; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.Toast; //サーフェイスビューテストプログラム public class SurfaceViewTestActivity extends Activity { //Surface の描画には、SurfaceHolder というインターフェースを利用します SurfaceHolder holder; Thread thread;//Thread クラスの変数 Bitmap image;//Bitmap クラスの image 画像 int px=0; //X 座標の初期値 int py=0; //Y 座標の初期値 int vx=10;//X 座標の増加分 int vy=10;//Y 座標の増加分 class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback,Runnable{ public ImageViewTest(Context context){ super(context); //リソース画像(地球)の読み込み Resources r=getResources( ); image=BitmapFactory.decodeResource(r,R.drawable.earth0s); holder=getHolder( ); //SurfaceHolder インターフェースの addCallback メソッドを呼び出して、 //コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドの生成と起動 thread=new Thread(this); thread.start( ); Toast.makeText(SurfaceViewTestActivity.this, "surfaceCreated",Toast.LENGTH_LONG).show( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 Toast.makeText(SurfaceViewTestActivity.this, "surfaceDestroyed", Toast.LENGTH_LONG).show( ); } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas=holder.lockCanvas( );//キャンバスをロックします canvas.drawColor(Color.BLACK);//Canvas の背景色を黒色で塗ります canvas.drawBitmap(image, px, py, null); // image 画像の描画 holder.unlockCanvasAndPost(canvas);//キャンバスを解放します if (px<0 || getWidth( )-image.getWidth( )<px)vx=-vx; if (py<0 || getHeight( )-image.getHeight( )<py)vy=-vy; px+=vx; py+=vy; try{ Thread.sleep(100);//100 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) }//class ImageViewTest //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); Toast.makeText(SurfaceViewTestActivity.this, "onCreate",Toast.LENGTH_LONG).show( ); } //@Override public void onDestroy( ){ super.onDestroy( ); Toast.makeText(SurfaceViewTestActivity.this, "onDestroy",Toast.LENGTH_LONG).show( ); //Thread クラスの Interrupt メソッドを呼び出し、実行中のスレッドに中断要求を行います Thread.interrupted( ); Toast.makeText(SurfaceViewTestActivity.this, "interrupted",Toast.LENGTH_LONG).show( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_surface_view_test,menu); return true; } }//public class SurfaceViewTestActivity P124 package com.example.earthrotation; import android.app.Activity; import android.content.res.Resources; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView; //地球自転プログラム public class EarthRotationActivity extends Activity { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; Thread thread;//Thread クラスの変数 Bitmap[ ] image=new Bitmap[6]; int px=120, py=160; int i=0; class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback,Runnable{ public ImageViewTest(Context context){ super(context); //リソース画像(地球)の読み込み Resources r=getResources( ); //地球の自転は反時計回りです。この方向に合わせて画像を配置します image[0]=BitmapFactory.decodeResource(r,R.drawable.earth300s); image[1]=BitmapFactory.decodeResource(r,R.drawable.earth240s); image[2]=BitmapFactory.decodeResource(r,R.drawable.earth180s); image[3]=BitmapFactory.decodeResource(r,R.drawable.earth120s); image[4]=BitmapFactory.decodeResource(r,R.drawable.earth60s); image[5]=BitmapFactory.decodeResource(r,R.drawable.earth0s); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas=holder.lockCanvas( ); if(i>=6)i=0; canvas.drawColor(Color.BLACK);//Canvas の背景色を黒色で塗ります canvas.drawBitmap(image[i], px, py, null); // image 画像の描画 holder.unlockCanvasAndPost(canvas); i=i+1; //スリープ時間は画像の動きを見て調整します try{ Thread.sleep(300);//300 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) }//class ImageViewTest //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); } //@Override public void onDestroy( ){ super.onDestroy( ); Thread.interrupted( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_earth_rotation,menu); return true; } } P129 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="480dp" android:orientation="vertical" > <com.example.earthbutton2.SurfaceViewEarth android:id="@+id/surfaceView1" android:layout_width="match_parent" android:layout_height="350dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" > <Button android:id="@+id/button1" android:layout_width="160dp" android:layout_height="40dp" android:text="左へ" /> <Button android:id="@+id/button2" android:layout_width="160dp" android:layout_height="40dp" android:text="右へ" /> </LinearLayout> </LinearLayout> P130 package com.example.earthbutton2; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class EarthButton2Activity extends Activity implements OnClickListener{ SurfaceViewEarth surface; int px=0; Button b1,b2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earth_button2); surface=(SurfaceViewEarth)findViewById(R.id.surfaceView1); b1=(Button)findViewById(R.id.button1); b2=(Button)findViewById(R.id.button2); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onPause( ){ super.onPause( ); surface.surfaceDestroyed(null); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: surface.px=surface.px-5; break; case R.id.button2: surface.px=surface.px+5; break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_earth_button2, menu); return true; } } P131 import android.view.SurfaceView; public class SurfaceViewEarth extends SurfaceView implements SurfaceHolder.Callback,Runnable{ SurfaceHolder holder;//Surface の描画には、SurfaceHolder というインターフェースを利用 Thread thread;//Thread クラスの変数 Bitmap[ ] image=new Bitmap[6]; int px=120,py=155,vx=10,vy=10; int i=0; public SurfaceViewEarth(Context context,AttributeSet attr){ super(context,attr); //リソース画像(地球)の読み込み Resources r=getResources( ); image[0]=BitmapFactory.decodeResource(r,R.drawable.earth300s); image[1]=BitmapFactory.decodeResource(r,R.drawable.earth240s); image[2]=BitmapFactory.decodeResource(r,R.drawable.earth180s); image[3]=BitmapFactory.decodeResource(r,R.drawable.earth120s); image[4]=BitmapFactory.decodeResource(r,R.drawable.earth60s); image[5]=BitmapFactory.decodeResource(r,R.drawable.earth0s); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas=holder.lockCanvas( ); if(i>=6)i=0; canvas.drawColor(Color.BLACK);//Canvas の背景色を黒色で塗ります canvas.drawBitmap(image[i], px, py, null); // image 画像の描画 holder.unlockCanvasAndPost(canvas); i=i+1; //スリープ try{ Thread.sleep(200);//200 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) } P135 package com.example.earthbutton2; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.util.AttributeSet; import android.view.SurfaceHolder; package com.example.earthmeteoritemove3; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class EarthMeteoriteMove3Activity extends Activity { SurfaceViewEarth surface; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earth_meteorite_move3); surface=(SurfaceViewEarth)findViewById(R.id.surfaceView1); } @Override public void onPause( ){ super.onPause( ); surface.surfaceDestroyed(null); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_earth_meteorite_move3, menu); return true; } } P136 package com.example.earthmeteoritemove3; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class SurfaceViewEarth extends SurfaceView implements SurfaceHolder.Callback,Runnable{ SurfaceHolder holder;//Surface の描画には、SurfaceHolder というインターフェースを利用 Thread thread;//Thread クラスの変数 Bitmap[ ] image=new Bitmap[6];//地球 earth Bitmap image1;//隕石 Meteorite int px=120,py=155,px2,py2; int i=0; //時間 t、周期 T、長軸 a1、短軸 b1、float 型の実数には f を付けます float t=0.0f,T=10.0f,a1=150.0f,b1=70.0f; public SurfaceViewEarth(Context context,AttributeSet attr){ super(context,attr); //リソース画像(地球)の読み込み Resources r=getResources( ); image[0]=BitmapFactory.decodeResource(r,R.drawable.earth300s); image[1]=BitmapFactory.decodeResource(r,R.drawable.earth240s); image[2]=BitmapFactory.decodeResource(r,R.drawable.earth180s); image[3]=BitmapFactory.decodeResource(r,R.drawable.earth120s); image[4]=BitmapFactory.decodeResource(r,R.drawable.earth60s); image[5]=BitmapFactory.decodeResource(r,R.drawable.earth0s); image1=BitmapFactory.decodeResource(r,R.drawable.meteorite1s); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 @Override public void run( ){ Canvas canvas; while(thread!=null){ canvas=holder.lockCanvas( ); if(i>=6)i=0; canvas.drawColor(Color.WHITE); float th=(float) (2*Math.PI/T); px2=(int) (a1*Math.cos(th*t)+getWidth( )/2.0); py2=(int) (-b1*Math.sin(th*t)+getHeight( )/2.0); if(py2>=155){ canvas.drawBitmap(image1, px2, py2, null);//隕石 canvas.drawBitmap(image[i], px, py, null);//地球 }else{ canvas.drawBitmap(image[i], px, py, null);//地球 canvas.drawBitmap(image1, px2, py2, null);//隕石 } holder.unlockCanvasAndPost(canvas); i=i+1; t=(float) (t+300.0/1000.0); //スリープ try{ Thread.sleep(300);//動作を見て調整 300 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) } P139 の1の解答 package com.example.earthbutton3; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class EarthButton3Activity extends Activity implements OnClickListener{ SurfaceViewEarth surface; int px=0,py=0; Button b1,b2,b3,b4; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earth_button3); surface=(SurfaceViewEarth)findViewById(R.id.surfaceView1); b1=(Button)findViewById(R.id.button1); b2=(Button)findViewById(R.id.button2); b3=(Button)findViewById(R.id.button3); b4=(Button)findViewById(R.id.button4); b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); b4.setOnClickListener(this); } @Override public void onPause( ){ super.onPause( ); surface.surfaceDestroyed(null); } @Override public void onClick(View v){ switch(v.getId( )){ case R.id.button1: surface.px=surface.px-10; break; case R.id.button2: surface.px=surface.px+10; break; case R.id.button3: surface.py=surface.py-10; break; case R.id.button4: surface.py=surface.py+10; break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater( ).inflate(R.menu.activity_earth_button3, menu); return true; } } P277 package com.example.earthbutton3; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class SurfaceViewEarth extends SurfaceView implements SurfaceHolder.Callback,Runnable{ SurfaceHolder holder;//Surface の描画には、SurfaceHolder というインターフェースを利用 Thread thread;//Thread クラスの変数 Bitmap[ ] image=new Bitmap[6]; int px=120,py=120,vx=10,vy=10; int i=0; public SurfaceViewEarth(Context context,AttributeSet attr){ super(context,attr); //リソース画像(地球)の読み込み Resources r=getResources( ); image[0]=BitmapFactory.decodeResource(r,R.drawable.earth300s); image[1]=BitmapFactory.decodeResource(r,R.drawable.earth240s); image[2]=BitmapFactory.decodeResource(r,R.drawable.earth180s); image[3]=BitmapFactory.decodeResource(r,R.drawable.earth120s); image[4]=BitmapFactory.decodeResource(r,R.drawable.earth60s); image[5]=BitmapFactory.decodeResource(r,R.drawable.earth0s); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas=holder.lockCanvas( );// if(i>=6)i=0; // canvas.drawColor(Color.BLACK);//Canvas の背景色を黒色で塗ります // canvas.drawColor(Color.WHITE); canvas.drawColor(Color.GRAY); canvas.drawBitmap(image[0], px, py, null); // image 画像の描画 holder.unlockCanvasAndPost(canvas); i=i+1; if (px<0 || getWidth( )-image[0].getWidth( )<px)vx=-vx; if (py<0 || getHeight( )-image[0].getWidth( )<py)vy=-vy; px+=vx; py+=vy; //スリープ try{ Thread.sleep(200);//200 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) } P279 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="480dp" android:orientation="vertical" > <!-- 注意 --> <com.example.earthbutton3.SurfaceViewEarth android:id="@+id/surfaceView1" android:layout_width="match_parent" android:layout_height="300dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginTop="5dp" android:gravity="center" > <Button android:id="@+id/button3" android:layout_width="100dp" android:layout_height="40dp" android:text="上" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" > <Button android:id="@+id/button1" android:layout_width="100dp" android:layout_height="40dp" android:text="左" /> <Button android:id="@+id/button2" android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="120dp" android:text="右" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" > <Button android:id="@+id/button4" android:layout_width="100dp" android:layout_height="40dp" android:text="下" /> </LinearLayout> </LinearLayout> P143 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/surfaceView1" android:layout_width="match_parent" android:layout_height="350dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="160dp" android:layout_height="wrap_content" android:text="円を描く" /> <Button android:id="@+id/button2" android:layout_width="160dp" android:layout_height="wrap_content" android:text="長方形を描く" /> </LinearLayout> </LinearLayout> P145 package com.example.gt01; import java.util.Random; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class GT01Activity extends Activityimplements OnClickListener, SurfaceHolder.Callback { Button b1,b2; SurfaceView mSV; Canvas canvas; Paint paint; Random rand; int r,g,b; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gt01); b1 = (Button)this.findViewById(R.id.button1); b2 = (Button)this.findViewById(R.id.button2); b1.setOnClickListener(this); b2.setOnClickListener(this); mSV = (SurfaceView)findViewById(R.id.surfaceView1); SurfaceHolder holder = mSV.getHolder( ); holder.addCallback(this);//コールバック関数を登録します } // ボタンのクリック時に呼び出されるメソッド public void onClick(View v) { switch(v.getId( )){ case R.id.button1: rand = new Random( ); canvas = mSV.getHolder( ).lockCanvas( );//Canvas をロック r=rand.nextInt(256);//0~255 の数値 g=rand.nextInt(256); b=rand.nextInt(256); canvas.drawColor(Color.rgb(r,g,b));//背景色 paint = new Paint( ); paint.setStrokeWidth(2.0f);//線幅 paint.setAntiAlias(true);//線を滑らかに描画 paint.setStyle(Paint.Style.STROKE);//線のみ表示 //r=rand.nextInt(256);//rgb メソッドで使いたい場合 //g=rand.nextInt(256); //b=rand.nextInt(256); paint.setColor(Color.BLACK);//円の色 canvas.drawCircle(160, 160, 100, paint);//円を描きます mSV.getHolder( ).unlockCanvasAndPost(canvas);//Canvas を解放 break; case R.id.button2: rand = new Random( ); canvas = mSV.getHolder( ).lockCanvas( );//Canvas をロック r=rand.nextInt(256);//0~255 g=rand.nextInt(256); b=rand.nextInt(256); canvas.drawColor(Color.rgb(r,g,b));//背景色 paint = new Paint( ); paint.setStrokeWidth(2.0f);//線幅 paint.setAntiAlias(true);//線を滑らかに描画 paint.setStyle(Paint.Style.STROKE);//線のみ表示 //r=rand.nextInt(256);//rgb メソッドで使いたい場合 //g=rand.nextInt(256); //b=rand.nextInt(256); paint.setColor(Color.BLACK);//四角形の線の色 canvas.drawRect(90, 90, 230, 230, paint);//四角形を描きます mSV.getHolder( ).unlockCanvasAndPost(canvas); break; } } // SurfaceView の変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } // SurfaceView の生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder) { } // SurfaceView の破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder holder) { } } P151 package com.example.gt02; import java.util.Random; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class GT02Activity extends Activity implements OnClickListener, SurfaceHolder.Callback { //背景色の r、g、b の値 int[ ][ ] mc={{255,0,0} ,{0,255,0},{0,0,255},{222,210,191}, {212,161,104} ,{170,179,0},{170,122,64},{248,169,0}, {190,0,50} ,{0,182,110},{0,106,182}}; //JIS 慣用色名、その他 String[ ] ms={"赤","緑","青","象牙色", "小麦色","若草色","琥珀色","山吹色", "赤(JIS 慣用色)","緑(JIS 慣用色)","青(JIS 慣用色)"}; Button b1,b2; int i=0; SurfaceView mSV; Canvas canvas; Paint paint; int num; EditText edit1; TextView text01,text02; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gt02); b1 = (Button)findViewById(R.id.button1); b1.setOnClickListener(this); text01 = (TextView)findViewById(R.id.textView1); text01.setText("半径を入力して円を描くプログラム"); text01.setTextSize(16.0f);//文字の大きさは実数、整数でも動作可 text01.setGravity(Gravity.CENTER);//文字の位置を center に指定 text02 = (TextView)findViewById(R.id.textView2); text02.setText("半径:");//textView2 に表示 text02.setGravity(Gravity.CENTER); edit1=(EditText)findViewById(R.id.editText1); edit1.setText("50");//初期値として使います mSV = (SurfaceView)findViewById(R.id.surfaceView1); // コールバック関数をセットします SurfaceHolder holder = mSV.getHolder( ); holder.addCallback(this); } // ボタンのクリック時に呼び出されるメソッド public void onClick(View v) { switch(v.getId( )){ case R.id.button1: canvas = mSV.getHolder( ).lockCanvas( ); if(i>=11)i=0; canvas.drawColor(Color.rgb(mc[i][0],mc[i][1],mc[i][2]));//背景色の r、g、b paint = new Paint( ); paint.setStrokeWidth(2.0f);//線幅 paint.setAntiAlias(true);//線を滑らかにします paint.setStyle(Paint.Style.STROKE);//円の線のみを表示 num=Integer.parseInt(edit1.getText( ).toString( ));//入力した値を整数にします text01.setText("背景色は"+ms[i]+"、"+"半径"+num+"の円"); text01.setGravity(Gravity.CENTER); paint.setColor(Color.BLACK);//円の色 canvas.drawCircle(160, 160,num , paint);//num に相当する円を描きます Toast.makeText(GT02Activity.this, ms[i], Toast.LENGTH_SHORT).show( );//Toast 文で背景色を表示 mSV.getHolder( ).unlockCanvasAndPost(canvas); i=i+1; break; } } // SurfaceView の変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } // SurfaceView の生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder) { } // SurfaceView の破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder holder) { } } P155 package com.example.gl3; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.Menu; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.Toast; public class GL3Activity extends Activity { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; Thread thread;//Thread クラスの変数 float X,Y; Paint paint; int num_yoko,num_tate; int h,w; int[ ] flag={0,0,0,0,0,0,0,0,0,0}; class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback,Runnable{ public ImageViewTest(Context context){ super(context); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas = holder.lockCanvas( ); canvas.drawColor(Color.rgb(222,210,191));//象牙色 paint = new Paint( ); paint.setStrokeWidth(2.0f);//線幅 paint.setAntiAlias(true);//線、文字を滑らかに paint.setTextSize(62);//文字サイズ指定 paint.setColor(Color.BLACK);//線の色を黒 w=320;//横幅 h=320;//縦の高さ //横線を描きます num_yoko=3; for(int k=0;k<num_yoko;k++){ canvas.drawLine(0, k*h/num_yoko, 320, k*h/num_yoko, paint); } canvas.drawLine(0, 320, 320, 320, paint); //縦線を描く num_tate=3; for(int k=0;k<num_tate;k++){ canvas.drawLine(k*w/num_tate, 0,k*w/num_tate , 320, paint); } canvas.drawText("A",30, 75, paint);//座標値に A 文字を表示 canvas.drawText("B",137, 75, paint); canvas.drawText("C",244, 75, paint); canvas.drawText("D",30, 180, paint); canvas.drawText("E",137, 180, paint); canvas.drawText("F",244, 180, paint); canvas.drawText("G",30, 290, paint); canvas.drawText("H",137, 290, paint); canvas.drawText("I",244, 290, paint); //********** A ******************** if((X>=2.0&&X<=102.0)&&(Y>=52.0&&Y<=152.0)){//A 文字の領域 if(flag[1]!=1){ paint.setTextSize(62);//文字サイズ指定 canvas.drawText("A",30, 75, paint); flag[1]=1; }else{ paint.setTextSize(24); canvas.drawText("Android",10, 90, paint);//単語を表示 } //********** B ******************** }else if((X>=107.0&&X<=212.0)&&(Y>=52.0&&Y<=152.0)){ if(flag[2]!=1){ paint.setTextSize(62); canvas.drawText("B",137, 75, paint); flag[2]=1; }else{ paint.setTextSize(24); canvas.drawText("Birthday",115, 90, paint); } //********** C ******************** }else if((X>=216.0&&X<=317.0)&&(Y>=52.0&&Y<=152.0)){ if(flag[3]!=1){ paint.setTextSize(62); canvas.drawText("C",244, 75, paint); flag[3]=1; }else{ paint.setTextSize(24); canvas.drawText("Computer",214, 90, paint); } //********** D ******************** }else if((X>=2.0&&X<=102.0)&&(Y>=157.0&&Y<=261.0)){ if(flag[4]!=1){ paint.setTextSize(62); canvas.drawText("D",30, 180, paint); flag[4]=1; }else{ paint.setTextSize(24); canvas.drawText("Describe",6, 195, paint); } //********** E ******************** }else if((X>=107.0&&X<=212.0)&&(Y>=157.0&&Y<=261.0)){ if(flag[5]!=1){ paint.setTextSize(62); canvas.drawText("E",137, 180, paint); flag[5]=1; }else{ paint.setTextSize(24); canvas.drawText("Earth",130, 200, paint); } //********** F ******************** }else if((X>=216.0&&X<=317.0)&&(Y>=157.0&&Y<=261.0)){ if(flag[6]!=1){ paint.setTextSize(62); canvas.drawText("F",244, 180, paint); flag[6]=1; }else{ paint.setTextSize(24); canvas.drawText("Forest",230, 195, paint); } //********** G ******************** }else if((X>=2.0&&X<=102.0)&&(Y>=266.0&&Y<=366.0)){ if(flag[7]!=1){ paint.setTextSize(62); canvas.drawText("G",30, 290, paint); flag[7]=1; }else{ paint.setTextSize(24); canvas.drawText("Garden",10, 310, paint); } //********** H ******************** }else if((X>=107.0&&X<=212.0)&&(Y>=266.0&&Y<=366.0)){ if(flag[8]!=1){ paint.setTextSize(62); canvas.drawText("H",137, 290, paint); flag[8]=1; }else{ paint.setTextSize(24); canvas.drawText("Holiday",117, 310, paint); } //********** I ******************** }else if((X>=216.0&&X<=317.0)&&(Y>=266.0&&Y<=366.0)){ if(flag[9]!=1){ paint.setTextSize(62); canvas.drawText("I",244, 290, paint); flag[9]=1; }else{ paint.setTextSize(24); canvas.drawText("Image",227, 310, paint); } } holder.unlockCanvasAndPost(canvas); //スリープ try{ Thread.sleep(200);//200 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) } //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); } //@Override public void onDestroy( ){ super.onDestroy( ); Thread.interrupted( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_gl3,menu); return true; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction( )){ case MotionEvent.ACTION_DOWN://画面でマウスをクリックすると動作 //マウスをクリックまたはタッチしたときの X 座標を取得 X = (float)Math.floor(event.getX( ));//floor( )メソッドを使って切り捨て //マウスをクリックまたはタッチしたときの Y 座標を取得 Y = (float) Math.floor(event.getY( )); String strX= String.valueOf(X);//String のオブジェクトに変換して返します String strY= String.valueOf(Y); String strXY= "X="+strX+" Y="+strY; //Toast 文で座標値を表示 Toast.makeText(this, strXY, Toast.LENGTH_SHORT).show( ); break; } return true; } } P162 package com.example.gs3; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class GS3Activity extends Activity implements OnClickListener, SurfaceHolder.Callback { Button b1; int i=0; SurfaceView mSV; Canvas canvas; Paint paint; //Path path; int w,h; int r,g,b; int num_yoko,num_tate; float[] y1=new float[321]; float[] y2=new float[321]; float[] y3=new float[321]; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gs3); b1 = (Button)findViewById(R.id.button1); b1.setOnClickListener(this); mSV = (SurfaceView)findViewById(R.id.surfaceView1); // コールバック関数をセットする SurfaceHolder holder = mSV.getHolder( ); holder.addCallback(this); } //ボタンのクリック時に呼び出されるメソッド public void onClick(View v) { switch(v.getId( )){ case R.id.button1: canvas = mSV.getHolder( ).lockCanvas( ); canvas.drawColor(Color.WHITE);//白色 paint = new Paint( ); //path=new Path( );//参考 paint.setAntiAlias(true); paint.setTextSize(16); paint.setStyle(Paint.Style.FILL); w=320; h=320; //目盛を描く paint.setColor(Color.rgb(131,131,131));//鼠色 paint.setStrokeWidth(0.5f); for(int k=0;k<16;k++){ canvas.drawLine(20*k, 0, 20*k, 320, paint);//縦目盛 canvas.drawLine(0, 20*k, 320, 20*k, paint);//横目盛 } canvas.drawLine(0, 320, 320, 320, paint);//横目盛 canvas.drawText("90",80, 175, paint);//度を表示 canvas.drawText("180",165, 175, paint); canvas.drawText("270",255, 175, paint); //cos 波(余弦波) //配列に計算結果を入れ、drawLine( )メソッドを使って線を滑らかに表示 paint.setColor(Color.rgb(255,0,0));//RED for(i=0;i<321;i=i+1){ //float t1=(float) (i*0.0001);//参考 //y1[i]=(float)(100* Math.cos(2*Math.PI*50*t1)); float t1=(float) (i*Math.PI/180);//i が度、t1 がラジアン y1[i]=(float)(100* Math.cos(t1)); } //i の値に注意、配列の大きさをこえて指定しないこと for(i=0;i<320;i++){ canvas.drawLine(i, 160-y1[i],i+1,160-y1[i+1], paint);//cos 波を描きます } canvas.drawText("赤 cosθ",180, 25, paint); //sin 波(正弦波) //配列に計算結果を入れ、drawLine( )メソッドを使って線を滑らかに表示 paint.setColor(Color.rgb(0,0,255));//BLUE for(i=0;i<321;i=i+1){ //float t2=(float) (i*0.0001);//参考 //y2[i]=(float)(100* Math.sin(2*Math.PI*50*t2)); float t2=(float) (i*Math.PI/180);//i が度、t2 がラジアン y2[i]=(float)(100* Math.sin(t2)); } //i の値に注意、配列の大きさをこえて指定しないこと for(i=0;i<320;i++){ canvas.drawLine(i, 160-y2[i],i+1,160-y2[i+1], paint);//sin 波を描画 } canvas.drawText("青 sinθ",180, 50, paint); //sin 波*cos 波 //配列に計算結果を入れ、drawLine( )メソッドを使って線を滑らかに表示 paint.setColor(Color.rgb(159,108,49));//土色 for(i=0;i<321;i=i+1){ //float t3=(float) (i*0.0001);//参考 //y3[i]=(float)(100* Math.sin(2*Math.PI*50*t3)); float t3=(float) (i*Math.PI/180);//i が度、t3 がラジアン y3[i]=(float)(100*( Math.sin(t3))*( Math.cos(t3))); } //i の値に注意、配列の大きさをこえて指定しないこと for(i=0;i<320;i++){ canvas.drawLine(i, 160-y3[i],i+1,160-y3[i+1], paint);//sinθ×cosθを描画 } canvas.drawText("土色 sinθ×cosθ",180, 75, paint); //横線を描く paint.setStrokeWidth(2.0f); paint.setColor(Color.BLACK); num_yoko=2; for(int k=0;k<num_yoko;k++){ canvas.drawLine(0, k*h/num_yoko, 320, k*h/num_yoko, paint); } //縦線を描く //num_tate=2; canvas.drawLine(0, 0, 0, 320, paint);//縦線 //for(int k=0;k<num_tate;k++){//参考 //canvas.drawLine(k*w/num_tate, 0,k*w/num_tate , 320, paint); // } mSV.getHolder( ).unlockCanvasAndPost(canvas); break; } } // SurfaceView の変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } // SurfaceView の生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder) { } // SurfaceView の破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder holder) { } } P167 package com.example.gb2; import java.util.Random; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView; //Random クラスを使って棒グラフを作ります public class GB2Activity extends Activity { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; Thread thread;//Thread クラスの変数 Paint paint; int h,w; Random rnd; int x1,y1; class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback,Runnable{ public ImageViewTest(Context context){ super(context); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ //スレッドを生成して起動させます thread=new Thread(this); thread.start( ); Log.i("x="," "+getWidth( )+" y="+getHeight( )); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ thread=null;//thread を null に設定 } //スレッドの処理 public void run( ){ Canvas canvas; while(thread!=null){ canvas = holder.lockCanvas( ); canvas.drawColor(Color.BLACK);//Canvas の背景色を黒色で塗ります paint = new Paint( ); paint.setStrokeWidth(2.0f); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL);//棒グラフの塗りつぶし w=320;//参考、この大きさでデザイン h=320; rnd=new Random( );//乱数を発生 y1=rnd.nextInt(200);//0 から 199 の乱数 x1=20; paint.setColor(Color.rgb(255,0,0));//赤 canvas.drawRect(x1, 20+y1, x1+30, 300, paint);//赤の棒グラフ paint.setColor(Color.rgb(159,108,49));//土色 y1=rnd.nextInt(200); canvas.drawRect(x1+50, 20+y1, x1+80, 300, paint); paint.setColor(Color.rgb(248,169,0));//山吹色 y1=rnd.nextInt(200); canvas.drawRect(x1+100, 20+y1, x1+130, 300, paint); paint.setColor(Color.rgb(151,166,30));//萌黄(もえぎ) y1=rnd.nextInt(200); canvas.drawRect(x1+150, 20+y1, x1+180, 300, paint); paint.setColor(Color.rgb(0,106,182));//青 y1=rnd.nextInt(200); canvas.drawRect(x1+200, 20+y1, x1+230, 300, paint); paint.setColor(Color.rgb(131,131,131));//鼠色 y1=rnd.nextInt(200); canvas.drawRect(x1+250, 20+y1,x1+280, 300, paint); paint.setTextSize(24); canvas.drawText("1 2 3 4 5 6", 30, 320, paint); paint.setTextSize(20); canvas.drawText("1 赤 2 土色 3 山吹色", 30, 350, paint); canvas.drawText("4 萌黄 5 青 6 鼠色 ", 30, 370, paint); holder.unlockCanvasAndPost(canvas); //スリープ try{ Thread.sleep(100);//100 ミリ秒休みます } catch (Exception e){ } }//while }//run( ) }//class ImageViewTest //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); } //@Override public void onDestroy( ){ super.onDestroy( ); Thread.interrupted( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_gb2,menu); return true; } } P172 package com.example.gl41; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.SystemClock; import android.util.Log; import android.view.Menu; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class GL41Activity extends Activity implements OnCompletionListener { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; float X,Y; Paint paint; Canvas canvas; MediaPlayer player; int x1,y1; String[ ] n={"1","2","3","4","5","6","7","8","9","*","0","#"}; String[ ] num={" "," "," "," "," "," "," "," "," "," "," "," "}; int s=0; int[ ] data={R.raw.c1,R.raw.c2,R.raw.c3,R.raw.c4,R.raw.c5,R.raw.c6, R.raw.c7,R.raw.c8,R.raw.c9, R.raw.cstar,R.raw.c0,R.raw.chash,R.raw.wacyu, R.raw.yobidashi3,R.raw.yobidashi4,R.raw.jyuwaki};//16 個(0~15) class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback{ public ImageViewTest(Context context){ super(context); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ canvas = holder.lockCanvas( ); GL41Activity.this.draw( ); holder.unlockCanvasAndPost(canvas); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ } } public void SoundOn(int b) { try { SoundOff( ); player=MediaPlayer.create(getBaseContext( ),b); player.seekTo(0);//MediaPlayer クラス再生位置を0ミリ秒に指定(頭出し) player.start( );//再生開始 player.setOnCompletionListener(this);//再生完了通知を受け取るリスナーを設定します } catch (Exception e) { } } public void SoundOff( ) { try { if (player==null) return; player.stop( );//再生の停止 player.setOnCompletionListener(null); player.release( );//リソースの解放 player=null; } catch (Exception e) { } } public void onCompletion(MediaPlayer mediaPlayer) { //再生完了通知を受けたら、サウンドをオフ SoundOff( ); } public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); } public void onDestroy( ){ super.onDestroy( ); } public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_gl41,menu); return true; } public void draw( ){ canvas.drawColor(Color.rgb(212,161,104));//背景色 小麦色 paint = new Paint( ); paint.setStrokeWidth(2.0f); paint.setAntiAlias(true); int x0=65; int y0=150; x1=50; y1=50; int xx=20; int yy=20; int k=0; paint.setTextSize(30); paint.setColor(Color.rgb(235,231,225));//白 for(int i=0;i<10;i++){ //canvas.drawRect(40,90,40+20,90+30, paint);//参考 以下のようにして考えます //canvas.drawRect(40+20+5,90,40+20+5+20,90+30, paint); //canvas.drawRect(40+20+5+20+5,90,40+20+5+20+5+20,90+30, paint); canvas.drawRect(40+(20+5)*i,90,40+(20+5)*i+20,90+30, paint); } paint.setColor(Color.rgb(0,0,0));//黒 paint.setStrokeWidth(3.0f);//太い線にします paint.setStyle(Paint.Style.STROKE); canvas.drawRect(55,140,265,420, paint);//番号外枠 canvas.drawRect(47,130,273,130, paint); canvas.drawRect(4,80,316,80, paint); canvas.drawRect(5,80,5,145, paint); canvas.drawRect(315,80,315,145, paint); canvas.drawRect(48,130,48,145, paint); canvas.drawRect(272,130,272,145, paint); canvas.drawRect(4,145,49,145, paint); canvas.drawRect(271,145,316,145, paint); paint.setStyle(Paint.Style.FILL);//黒で塗り潰し canvas.drawRect(105,140,120,130, paint);//電話のフック canvas.drawRect(195,140,210,130, paint);// paint.setStrokeWidth(2.0f);//太い文字 canvas.drawText("こども電話", 75, 50, paint); paint.setColor(Color.rgb(235,231,225));//白 for(int i=0;i<4;i++){ for(int j=0;j<3;j++){ //canvas.drawRect(65,y0,65+50,y0+y1, paint);//参考、以下のようにして考えます //canvas.drawRect(65+50+20,y0,65+50+20+50,y0+y1, paint); canvas.drawRect(x0+(x1+xx)*j,y0+(y1+yy)*i,x0+(x1+xx)*j+x1,y0+y1+(y1+yy)*i, paint); paint.setColor(Color.rgb(0,0,0));//黒でボタンの文字を書きます canvas.drawText(n[k], x0+(x1+xx)*j+15, y0+(y1+yy)*i+35, paint); paint.setColor(Color.rgb(235,231,225));//白 k=k+1; if(k>=12)k=0; } } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction( )){//タッチイベントのアクション //タッチの位置座標の表示 case MotionEvent.ACTION_DOWN: //マウスをクリックまたはタッチしたときの X 座標を取得 X = (float)Math.floor(event.getX( )); //マウスをクリックまたはタッチしたときの Y 座標を取得 Y = (float) Math.floor(event.getY( )); canvas = holder.lockCanvas( );//キャンバスをロックしてから描画 draw( );//電話の描画 //********** 1 ******************** if((X>=66.0&&X<=112.0)&&(Y>=200.0&&Y<=250.0)){//ボタン1をタッチ num[s]="1";//電話番号1を配列に格納 if(player==null){ SoundOn(data[0]);//ボタン1の音を出します SystemClock.sleep(200);//200msec 待ちます }else{ SoundOff( );//サウンドを OFF } } //********** 2 ******************** if((X>=135.0&&X<=185.0)&&(Y>=200.0&&Y<=250.0)){ num[s]="2"; if(player==null){ SoundOn(data[1]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 3 ******************** if((X>=205.0&&X<=252.0)&&(Y>=200.0&&Y<=250.0)){ num[s]="3"; if(player==null){ SoundOn(data[2]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 4 ******************** if((X>=66.0&&X<=112.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="4"; if(player==null){ SoundOn(data[3]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 5 ******************** if((X>=135.0&&X<=185.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="5"; if(player==null){ SoundOn(data[4]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 6 ******************** if((X>=205.0&&X<=252.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="6"; if(player==null){ SoundOn(data[5]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 7 ******************** if((X>=66.0&&X<=112.0)&&(Y>=341.0&&Y<=388.0)){ num[s]="7"; if(player==null){ SoundOn(data[6]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 8 ******************** if((X>=135.0&&X<=185.0)&&(Y>=340.0&&Y<=388.0)){ num[s]="8"; if(player==null){ SoundOn(data[7]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 9 ******************** if((X>=205.0&&X<=252.0)&&(Y>=340.0&&Y<=388.0)){ num[s]="9"; if(player==null){ SoundOn(data[8]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** *アスタリスク ******************** if((X>=66.0&&X<=112.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="*"; if(player==null){ SoundOn(data[9]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** 0 ******************** if((X>=135.0&&X<=185.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="0"; if(player==null){ SoundOn(data[10]); SystemClock.sleep(200); }else{ SoundOff( ); } } //********** #シャープ ******************** if((X>=205.0&&X<=252.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="#"; if(player==null){ SoundOn(data[11]); SystemClock.sleep(200); }else{ SoundOff( ); } } paint.setTextSize(30);//テキストサイズ 30 にします //電話番号 num for(int i=0;i<10;i++){ paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawText(num[i], 42+i*25,117, paint);//上段枠内に電話番号を書き込みます } Log.i("num="," "+num[s]);//確認用 Log if(s==9){ SoundOn(data[14]);//呼び出し音 for(int i=0;i<10;i++){ num[i]=" ";//配列の内容クリア } } s=s+1; if(s>=10){ s=0; } holder.unlockCanvasAndPost(canvas);//キャンバスを解放します break; } return true; } } P181 package com.example.gl2; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.ToneGenerator; import android.os.Bundle; import android.os.SystemClock; import android.util.Log; import android.view.Menu; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class GL2Activity extends Activity implements OnCompletionListener { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; float X,Y; Paint paint; Canvas canvas; MediaPlayer player; ToneGenerator toneGenerator; int x1,y1; String[ ] n={"1","2","3","4","5","6","7","8","9","*","0","#"}; String[ ] num={" "," "," "," "," "," "," "," "," "," "," "," "}; int s=0; int[ ] data={R.raw.c1,R.raw.c2,R.raw.c3,R.raw.c4,R.raw.c5,R.raw.c6, R.raw.c7,R.raw.c8,R.raw.c9, R.raw.cstar,R.raw.c0,R.raw.chash,R.raw.wacyu, R.raw.yobidashi3,R.raw.yobidashi4,R.raw.jyuwaki};//16 個(0~15) class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback{ public ImageViewTest(Context context){ super(context); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ canvas = holder.lockCanvas( ); GL2Activity.this.draw( ); holder.unlockCanvasAndPost(canvas); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ } } public void SoundOn(int b) { try { SoundOff( ); player=MediaPlayer.create(getBaseContext( ),b); //MediaPlayer クラスの seekTo( )メソッドを使います player.seekTo(0);//MediaPlayer クラス再生位置を0ミリ秒に指定(頭出し) player.start( );//再生開始 player.setOnCompletionListener(this);//再生完了通知を受け取るリスナーを設定します } catch (Exception e) { } } public void SoundOff( ) { try { if (player==null) return; player.stop( );//再生の停止 player.setOnCompletionListener(null); player.release( );//リソースの解放 player=null; } catch (Exception e) { } } public void onCompletion(MediaPlayer mediaPlayer) { //再生完了通知を受けたら、サウンドをオフ SoundOff( ); } //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); toneGenerator = new ToneGenerator(android.media.AudioManager.STREAM_DTMF, ToneGenerator.MAX_VOLUME); } public void onStop( ) { super.onStop( ); toneGenerator.release( ); } //@Override public void onDestroy( ){ super.onDestroy( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_gl2,menu); return true; } public void draw( ){ canvas.drawColor(Color.rgb(212,161,104));//背景色 小麦色 paint = new Paint( ); paint.setStrokeWidth(2.0f); paint.setAntiAlias(true); int x0=65; int y0=150; x1=50; y1=50; int xx=20; int yy=20; int k=0; paint.setTextSize(30); paint.setColor(Color.rgb(235,231,225));//白 for(int i=0;i<10;i++){ canvas.drawRect(40+(20+5)*i,90,40+(20+5)*i+20,90+30, paint); } paint.setColor(Color.rgb(0,0,0));//黒 paint.setStrokeWidth(3.0f); paint.setStyle(Paint.Style.STROKE); canvas.drawRect(55,140,265,420, paint);//番号外枠 canvas.drawRect(47,130,273,130, paint); canvas.drawRect(4,80,316,80, paint); canvas.drawRect(5,80,5,145, paint); canvas.drawRect(315,80,315,145, paint); canvas.drawRect(48,130,48,145, paint); canvas.drawRect(272,130,272,145, paint); canvas.drawRect(4,145,49,145, paint); canvas.drawRect(271,145,316,145, paint); paint.setStyle(Paint.Style.FILL); canvas.drawRect(105,140,120,130, paint); canvas.drawRect(195,140,210,130, paint); paint.setStrokeWidth(2.0f); canvas.drawText("こども電話", 75, 50, paint); paint.setColor(Color.rgb(235,231,225));//白 for(int i=0;i<4;i++){ for(int j=0;j<3;j++){ canvas.drawRect(x0+(x1+xx)*j,y0+(y1+yy)*i,x0+(x1+xx)*j+x1,y0+y1+(y1+yy)*i, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawText(n[k], x0+(x1+xx)*j+15, y0+(y1+yy)*i+35, paint); paint.setColor(Color.rgb(235,231,225));//白 k=k+1; if(k>=12)k=0; } } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction( )){ //タッチの位置座標の表示 case MotionEvent.ACTION_DOWN: //マウスをクリックまたはタッチしたときの X 座標を取得 X = (float)Math.floor(event.getX( )); //マウスをクリックまたはタッチしたときの Y 座標を取得 Y = (float) Math.floor(event.getY( )); canvas = holder.lockCanvas( ); draw( ); //********************** DTMF の音 ************************************** // toneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP, 5000); // toneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP2 , 2000); // toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 1000); // toneGenerator.startTone(ToneGenerator.TONE_PROP_NACK, 2000); // toneGenerator.startTone(ToneGenerator.TONE_SUP_BUSY, 2000); // toneGenerator.startTone(ToneGenerator.TONE_SUP_CALL_WAITING, 6000); // toneGenerator.startTone(ToneGenerator.TONE_SUP_RINGTONE, 200); // toneGenerator.startTone(ToneGenerator.TONE_SUP_RADIO_NOTAVAIL, 5000); // toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 1000); //********************************************************************************* //********** 1 ******************** if((X>=66.0&&X<=112.0)&&(Y>=200.0&&Y<=250.0)){ num[s]="1"; // 再生時間 200 ミリ秒(35-1500) toneGenerator.startTone(ToneGenerator.TONE_DTMF_1, 200);//トーン持続時間 200msec SystemClock.sleep(200); } //********** 2 ******************** if((X>=135.0&&X<=185.0)&&(Y>=200.0&&Y<=250.0)){ num[s]="2"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_2, 200);//2 SystemClock.sleep(200); } //********** 3 ******************** if((X>=205.0&&X<=252.0)&&(Y>=200.0&&Y<=250.0)){ num[s]="3"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_3, 200);//3 SystemClock.sleep(200); } //********** 4 ******************** if((X>=66.0&&X<=112.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="4"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_4, 200);//4 SystemClock.sleep(200); } //********** 5 ******************** if((X>=135.0&&X<=185.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="5"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_5, 200);//5 SystemClock.sleep(200); } //********** 6 ******************** if((X>=205.0&&X<=252.0)&&(Y>=270.0&&Y<=317.0)){ num[s]="6"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_6, 200);//6 SystemClock.sleep(200); } //********** 7 ******************** if((X>=66.0&&X<=112.0)&&(Y>=341.0&&Y<=388.0)){ num[s]="7"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_7, 200);//7 SystemClock.sleep(200); } //********** 8 ******************** if((X>=135.0&&X<=185.0)&&(Y>=340.0&&Y<=388.0)){ num[s]="8"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_8, 200);//8 SystemClock.sleep(200); } //********** 9 ******************** if((X>=205.0&&X<=252.0)&&(Y>=340.0&&Y<=388.0)){ num[s]="9"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_9, 200);//9 SystemClock.sleep(200); } //********** *アスタリスク ******************** if((X>=66.0&&X<=112.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="*"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_S, 200);//* SystemClock.sleep(200); } //********** 0 ******************** if((X>=135.0&&X<=185.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="0"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_0, 200);//0 SystemClock.sleep(200); } //********** #シャープ ******************** if((X>=205.0&&X<=252.0)&&(Y>=410.0&&Y<=457.0)){ num[s]="#"; toneGenerator.startTone(ToneGenerator.TONE_DTMF_P, 200);//# SystemClock.sleep(200); } paint.setTextSize(30); //電話番号 num for(int i=0;i<10;i++){ paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawText(num[i], 42+i*25,117, paint); } Log.i("num="," "+num[s]); if(s==9){ SoundOn(data[14]); for(int i=0;i<10;i++){ num[i]=" "; } } s=s+1; if(s>=10){ s=0; } holder.unlockCanvasAndPost(canvas); break; } return true; } } P189 の1の解答 package com.example.gs4; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class GS4Activity extends Activity implements OnClickListener, SurfaceHolder.Callback { Button b1; int i=0; SurfaceView mSV; Canvas canvas; Paint paint; int w,h; int r,g,b; int num_yoko,num_tate; float[ ] y1=new float[321]; float[ ] y2=new float[321]; //float[ ] y3=new float[321]; float f1=100,f2=500; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gs4); b1 = (Button)findViewById(R.id.button1); b1.setOnClickListener(this); mSV = (SurfaceView)findViewById(R.id.surfaceView1); // コールバック関数をセットします SurfaceHolder holder = mSV.getHolder( ); holder.addCallback(this); } //ボタンのクリック時に呼び出されるメソッド public void onClick(View v) { switch(v.getId( )){ case R.id.button1: canvas = mSV.getHolder( ).lockCanvas( ); canvas.drawColor(Color.WHITE);//白色 paint = new Paint( ); paint.setAntiAlias(true); paint.setTextSize(16); //paint.setStyle(Paint.Style.STROKE); paint.setStyle(Paint.Style.FILL); w=320; h=320; //目盛を描く paint.setColor(Color.rgb(131,131,131));//鼠色 paint.setStrokeWidth(0.5f); for(int k=0;k<16;k++){ canvas.drawLine(20*k, 0, 20*k, 320, paint);//縦目盛 canvas.drawLine(0, 20*k, 320, 20*k, paint);//横目盛 } canvas.drawLine(0, 320, 320, 320, paint);//横目盛 //sin 波 100Hz(正弦波) //配列に計算結果を入れ、drawLine( )メソッドを使って線を滑らかに表示 paint.setColor(Color.rgb(255,0,0));//RED for(i=0;i<321;i=i+1){ float t1=(float) (i*0.0001);// y1[i]=(float)(100* Math.sin(2*Math.PI*f1*t1)); } //i の値に注意、配列の大きさをこえて指定しないこと for(i=0;i<320;i++){ canvas.drawLine(i, 160-y1[i],i+1,160-y1[i+1], paint);// } canvas.drawText("赤 sinθ canvas.drawText("縦軸:振幅 "+f1+"Hz",160, 25, paint); 横軸:時間",50, 280, paint); canvas.drawText(f1+"Hz の場合 周期 "+1/f1+"sec",50, 300, paint); //sin 波 500Hz(正弦波) //配列に計算結果を入れ、drawLine( )メソッドを使って線を滑らかに表示 paint.setColor(Color.rgb(0,0,255));//BLUE for(i=0;i<321;i=i+1){ float t2=(float) (i*0.0001); y2[i]=(float)(100* Math.sin(2*Math.PI*f2*t2)); } //i の値に注意、配列の大きさをこえて指定しないこと for(i=0;i<320;i++){ canvas.drawLine(i, 160-y2[i],i+1,160-y2[i+1], paint);// } canvas.drawText("青 sinθ "+f2+"Hz",160, 50, paint); canvas.drawText(f2+"Hz の場合 周期 "+1/f2+"sec",50, 315, paint); //横線を描く paint.setStrokeWidth(2.0f); paint.setColor(Color.BLACK); num_yoko=2; for(int k=0;k<num_yoko;k++){ canvas.drawLine(0, k*h/num_yoko, 320, k*h/num_yoko, paint); } //縦線を描く canvas.drawLine(0, 0, 0, 320, paint);//縦線 mSV.getHolder( ).unlockCanvasAndPost(canvas); break; } } //SurfaceView の変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } //SurfaceView の生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder) { } //SurfaceView の破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder holder) { } } P190 の5の解答 package com.example.gl3; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.SystemClock; import android.view.Menu; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.Toast; public class GL3Activity extends Activity implements OnCompletionListener { //Surface の描画には、SurfaceHolder というインターフェースを利用 SurfaceHolder holder; float X,Y; Paint paint; Canvas canvas; MediaPlayer player; int x1,y1; //mav 音声ファイルは容量が大きいので今回は使用しません //mp3 音声ファイル // int[ ] data={R.raw.do1,R.raw.re,R.raw.mi,R.raw.fa,R.raw.so,R.raw.ra, // R.raw.si,R.raw.do2,R.raw.do1s,R.raw.res,R.raw.fas,R.raw.sos, // R.raw.ras,R.raw.do2s}; // ogg 音声ファイル int[ ] data={R.raw.cdo1,R.raw.cre,R.raw.cmi,R.raw.cfa,R.raw.cso,R.raw.cra, R.raw.csi,R.raw.cdo2,R.raw.cdo1s,R.raw.cres,R.raw.cfas,R.raw.csos, R.raw.cras,R.raw.cdo2s}; class ImageViewTest extends SurfaceView implements SurfaceHolder.Callback{ public ImageViewTest(Context context){ super(context); holder=getHolder( ); //SurfaceHolder の addCallback を呼び出して、コールバックに設定します holder.addCallback(this); holder.setFixedSize(getWidth( ), getHeight( )); } //サーフェイスの生成時に呼び出されるメソッド public void surfaceCreated(SurfaceHolder holder){ canvas = holder.lockCanvas( ); GL3Activity.this.draw( ); holder.unlockCanvasAndPost(canvas); } //サーフェイスの変更時に呼び出されるメソッド public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ } //サーフェイスの破棄時に呼び出されるメソッド public void surfaceDestroyed(SurfaceHolder hoder){ } } public void SoundOn(int b) { try { SoundOff( ); player=MediaPlayer.create(getBaseContext( ),b); //MediaPlayer クラスの seekTo( )メソッドを使います player.seekTo(0);//MediaPlayer クラス再生位置を0ミリ秒に指定(頭出し) player.start( );//再生開始 player.setOnCompletionListener(this);//再生完了通知を受け取るリスナーを設定します } catch (Exception e) { } } public void SoundOff( ) { try { if (player==null) return; player.stop( );//再生の停止 player.setOnCompletionListener(null); player.release( );//リソースの解放 player=null; } catch (Exception e) { } } public void onCompletion(MediaPlayer mediaPlayer) { //再生完了通知を受けたら、サウンドをオフ SoundOff( ); } //@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(new ImageViewTest(this)); } public void onDestroy( ){ super.onDestroy( ); } //@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater( ).inflate(R.menu.activity_gl3,menu); return true; } public void draw( ){ canvas.drawColor(Color.rgb(212,161,104));//背景色 小麦色 paint = new Paint( ); paint.setStrokeWidth(2.0f); paint.setAntiAlias(true); y1=100; x1=0; //白鍵 paint.setColor(Color.rgb(235,231,225));//白 canvas.drawRect(x1+1, 20+y1, x1+40, 300, paint); canvas.drawRect(x1+41, 20+y1, x1+80, 300, paint); canvas.drawRect(x1+81, 20+y1, x1+120, 300, paint); canvas.drawRect(x1+121, 20+y1, x1+160, 300, paint); canvas.drawRect(x1+161, 20+y1, x1+200, 300, paint); canvas.drawRect(x1+201, 20+y1,x1+240, 300, paint); canvas.drawRect(x1+241, 20+y1,x1+280, 300, paint); canvas.drawRect(x1+281, 20+y1,x1+320, 300, paint); //黒鍵 paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+25, 20+y1,x1+55, 220, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+65, 20+y1,x1+95, 220, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+145, 20+y1,x1+175, 220, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+185, 20+y1,x1+215, 220, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+225, 20+y1,x1+255, 220, paint); paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+305, 20+y1,x1+320, 220, paint); //鍵盤の間の線 黒(見やすくするため) paint.setColor(Color.rgb(0,0,0));//黒 canvas.drawRect(x1+40, 120+y1,x1+41, 300, paint); canvas.drawRect(x1+80, 120+y1,x1+81, 300, paint); canvas.drawRect(x1+120, 20+y1,x1+121, 300, paint); canvas.drawRect(x1+160, 120+y1,x1+161, 300, paint); canvas.drawRect(x1+200, 120+y1,x1+201, 300, paint); canvas.drawRect(x1+240, 120+y1,x1+241, 300, paint); canvas.drawRect(x1+280, 20+y1,x1+281, 300, paint); canvas.drawRect(x1+320, 120+y1,x1+321, 300, paint); paint.setTextSize(20); canvas.drawText("ド レ ミ ファ ソ ラ シ ド", 10, 320, paint); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction( )){ //タッチの位置座標の表示 case MotionEvent.ACTION_DOWN: //マウスをクリックまたはタッチしたときの X 座標を取得 X = (float)Math.floor(event.getX( )); //マウスをクリックまたはタッチしたときの Y 座標を取得 Y = (float) Math.floor(event.getY( )); String strX= String.valueOf(X); String strY= String.valueOf(Y); String strXY= "X="+strX+" Y="+strY; //画面表示 Toast.makeText(this, strXY, Toast.LENGTH_SHORT).show( ); canvas = holder.lockCanvas( ); draw( ); //********** ド ******************** if((X>=1.0&&X<=39.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[0]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** レ ******************** if((X>=42.0&&X<=79.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[1]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ミ ******************** if((X>=82.0&&X<=119.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[2]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ファ ******************** if((X>=122.0&&X<=159.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[3]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ソ ******************** if((X>=162.0&&X<=199.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[4]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ラ ******************** if((X>=202.0&&X<=239.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[5]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** シ ******************** if((X>=242.0&&X<=279.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[6]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ド ******************** if((X>=282.0&&X<=319.0)&&(Y>=272.0&&Y<=348.0)){ if(player==null){ SoundOn(data[7]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ド# ******************** if((X>=25.0&&X<=55.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[8]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** レ# ******************** if((X>=65.0&&X<=95.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[9]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ファ# ******************** if((X>=145.0&&X<=175.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[10]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ソ# ******************** if((X>=185.0&&X<=215.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[11]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ラ# ******************** if((X>=225.0&&X<=255.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[12]); SystemClock.sleep(300); }else{ SoundOff( ); } } //********** ド# ******************** if((X>=305.0&&X<=320.0)&&(Y>=170.0&&Y<=270.0)){ if(player==null){ SoundOn(data[13]); SystemClock.sleep(300); }else{ SoundOff( ); } } holder.unlockCanvasAndPost(canvas); break; } return true; } } P201 public class Comparison { public static void main(String[] args) { //整数値の場合 int a=10,b=20; if(a==b){ System.out.println("1 等しい"); }else{ System.out.println("1 等しくない"); } //実数値の場合 計算誤差が生じるので注意 double f1,f2; f1=(double) (1.0-0.9);//計算結果は 0.1 と思うが f2=(double) (1.0/10.0);//計算結果は 0.1 if(f1==f2){ System.out.println("2 等しい "+"f1="+f1+" f2="+f2); }else{ System.out.println("2 等しくない "+"f1="+f1+" f2="+f2); } //文字の場合 char c='a',d='a'; if(c==d){ System.out.println("3 等しい"); }else{ System.out.println("3 等しくない"); } //文字列の場合 String e="abc",f="abc"; if(e.equals(f )){ System.out.println("4 等しい"); }else{ System.out.println("4 等しくない"); } P204 import java.util.Random; public class Logical { public static void main(String[ ] args) { // TODO 自動生成されたメソッド・スタブ float X=0.0F,Y=0.0F; Random rnd=new Random( ); X=(float)(rnd.nextInt(51)); Y=(float)(rnd.nextInt(41)); System.out.println("x="+X+" Y="+Y); //**** &&の使い方 ******* if((X>=5.0&&X<=50.0)&&(Y>=2.0&&Y<=40.0)){ System.out.println("1 あたり"); }else{ System.out.println("1 はずれ"); } //**** ||の使い方 ******* if((X>=5.0&&X<=50.0)||(Y>=2.0&&Y<=40.0)){ System.out.println("2 あたり"); }else{ System.out.println("2 はずれ"); } //**** !の使い方 ******* if(!(X>=5.0&&X<=50.0)){ System.out.println("3 あたり"); }else{ System.out.println("3 はずれ"); } } } P206 public class Bit { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ //10 進数、2 進数、16 進数 //10 進数 2 進数 // 10 1010 16 進数 0x0a // 11 1011 0x0b // 12 1100 0x0c int x=10;//10 進数の 10 //10 進数の 10 を 2 進数に変換すると 1010 String b = Integer.toBinaryString(x);//10 進数を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換="+b); //10 進数の 10 を 16 進数に変換すると 0x0a b = Integer.toHexString(x);// 10 進数を 16 進数に変換 System.out.println("10 進数 10 を 16 進数に変換="+b); System.out.println("***********************************"); //論理積 AND int y=15;//10 進数 15 を 2 進数に変換すると 1111 int z=x&y; b = Integer.toBinaryString(x);//10 進数 10 を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換="+b); b = Integer.toBinaryString(y);//10 進数 15 を 2 進数に変換 System.out.println("10 進数 15 を 2 進数に変換="+b); b = Integer.toBinaryString(z);//10 進数 z を 2 進数に変換 System.out.println(" 論理積 AND="+b);//2 進数表示 System.out.println("10 進数表示 論理積 AND="+z);//10 進数表示 System.out.println("***********************************"); //ビット反転 b = Integer.toBinaryString(x);//10 進数 10 を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換="+b); z=~x; b = Integer.toBinaryString(z);//10 進数 z を 2 進数に変換 System.out.println(" ビット反転="+b); System.out.println("10 進数表示 ビット反転="+z);//10 進数表示 System.out.println("***********************************"); //算術左シフト z=x<<2; b = Integer.toBinaryString(x);//10 進数 10 を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換 ="+b); b = Integer.toBinaryString(z);//10 進数 z を 2 進数に変換 System.out.println(" 算術左シフト="+b); System.out.println("10 進数表示 算術左シフト="+z);//10 進数表示 System.out.println("***********************************"); //算術右シフト b = Integer.toBinaryString(x);//10 進数 10 を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換 ="+b); z=x>>2; b = Integer.toBinaryString(z);//10 進数 z を 2 進数に変換 System.out.println(" 算術右シフト="+b); System.out.println("10 進数表示 算術右シフト="+z);//10 進数表示 System.out.println("***********************************"); //論理右シフト b = Integer.toBinaryString(x);//10 進数 z を 2 進数に変換 System.out.println("10 進数 10 を 2 進数に変換 ="+b); z=x>>>2; b = Integer.toBinaryString(z);//10 進数 z を 2 進数に変換 System.out.println(" 論理右シフト="+b); System.out.println("10 進数表示 論理右シフト="+z);//10 進数表示 } } P212 public class Array { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int x=10,y=20,z; //配列の宣言方法1 配列の初期化 int[ ] xa={100,200,500}; //配列の宣言方法2 int[ ] ya; ya=new int[3]; //配列の宣言方法3 int[ ] yb=new int[3]; //二次元配列 3 行 3 列の宣言方法4 int[ ][ ] xx={{100,500,100},{2,5,10},{50,70,40}}; int[ ][ ] zz=new int[3][3]; //文字列の配列宣言方法5 String[ ] str={"apple","orange","persimmon"}; String[ ] str2={"リンゴ","ミカン","柿"}; //データの交換 x=20 y=10 を // x=10 y=20 にする方法 z=x; x=y; y=z; System.out.println("x="+x+" y="+y); //配列データの交換 xa[0]=100 // xa[0]=500 xa[1]=100 xa[1]=200 xa[2]=500 を xa[2]=200 にする方法 z=xa[0]; xa[0]=xa[2]; xa[2]=xa[1]; xa[1]=z; System.out.println("xa[0]="+xa[0]+" xa[1]="+xa[1]+" xa[2]="+xa[2]); //交換してできたデータを別の配列に入れる方法 for(int i=0;i<3;i++){ ya[i]=xa[i]; } System.out.println("ya[0]="+ya[0]+" ya[1]="+ya[1]+" ya[2]="+ya[2]); //配列の長さを知る方法 z=xa.length; System.out.println("配列の長さ="+z); //文字列配列 要素の比較 if("apple".equals(str[0])){ System.out.println(str2[0]); } } } P216 public class Control { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int num=3; //****** if 文 ***** if(num>=3){ System.out.println("if 文の num は 3 以上です。"); } //****** if~else 文 ***** if(num>=3){ System.out.println("if~else 文の num は 3 以上です。"); }else{ System.out.println("if~else 文の num は 3 より小さいです。"); } //****** if~else if 文 ***** if(num==1){ System.out.println("if~else if 文の num は 1 です。"); }else if(num==2){ System.out.println("if~else if 文の num は 2 です。"); }else if(num==3){ System.out.println("if~else if 文の num は 3 です。"); }else{ System.out.println("if~else if 文の num はそれ以外です。"); } //****** switch 文 ***** switch(num){ case 1: System.out.println("switch 文の num は 1 です。"); break; case 2: System.out.println("switch 文の num は 2 です。"); break; case 3: System.out.println("switch 文の num は 3 です。"); break; default: System.out.println("switch 文の num はそれ以外です。"); break; } //****** for 文 ***** for(int i=0;i<num;i++){ System.out.println(i+"回目の for 文です。"); } //****** while 文 ***** num=1; while(num<=3){ System.out.println(num+"回目の while 文です。"); num++; } //****** do~while 文 ***** num=1; do{ System.out.println(num+"回目の do~while 文です。"); num++; }while(num<=3); //****** 無限ループ for 文 ***** //Eclipse の「終了」ボタンを確認してから実行してください // for(;;){ // System.out.println("無限の for 文です。"); // } //****** 無限ループ while 文 ***** // while(true){ // System.out.println("無限の while 文です。"); // } //****** 無限ループ while 文 ***** // num=3; // while(num>=3){ // System.out.println("これも無限の while 文です。"); // } } } P225 class ConTest{//クラスはフィールドとメソッドをメンバとして持ちます int num=10;//型名 フィールド名 String str; //コンストラクタを使う場合はクラス名と同じにします //オブジェクトを作成すると ConTest( )コンストラクタが実行されます public ConTest( ){//戻り値がないのでコンストラクタ num=20; System.out.println("コンストラクタのテストです num="+num); } public void test1( ){//引数のない void 型のメソッド num=num+1; System.out.println("test1( )メソッドのテストです num="+num); return;//void 型の場合 return は省略できます } public void test11(int a,String b){//引数が2つある void 型のメソッド num=a; str=b; System.out.println("num="+num+" str="+str); } } public class Class_Method2 { static int count=30; static int xx; public static void main(String[ ] args) { // TODO 自動生成されたメソッド・スタブ String st; int x=40; int y=50; xx=xx+1; System.out.println("xx="+xx); y=y+1; System.out.println("x="+x+" y="+y); //宣言した ConTest クラスを利用するには、オブジェクトを作成しなければならない //オブジェクト ct を作成すると同時に ConTest( )コンストラクタを実行します ConTest ct=new ConTest( );//オブジェクトの作成 ct.test1( );//ConTest クラスの test1( )メソッドを呼び出します ct.num=60;//オブジェクトを作成するとフィールドにアクセスできます ct.num=ct.num+1; ct.test1( );//オブジェクトを作成するとメソッドにアクセスできます ct.test11(150,"JavaTest"); test2( ); xx=70; test3(xx); xx=inttest( ); System.out.println("int 型の inttest( )メソッドです xx="+xx); st=stringtest( ); System.out.println("String 型の stringtest( )メソッドです st="+st); } static void test2( ){//引数のない void 型のメソッド count=count+1; System.out.println("引数のない void 型の test2( )メソッドです count="+count); } static void test3(int b){//引数のある void 型メソッド int a=b; xx=xx+2; System.out.println("引数nのある void 型の test3(int b)メソッドです a="+a); System.out.println("引数nのある void 型の test3(int b)メソッドです xx="+xx); } static int inttest( ){//引数のない int 型のメソッド int i=10; return i;//void 型以外は return 文が必要 } static String stringtest( ){//引数のない String 型のメソッド String str="Java"; return str; } } P232 class Zukei{//Zukei クラスはスーパークラス int yoko=10;//インスタンス変数 int tate=20; public void cmen( ){//メソッド yoko=30; tate=40; int cmenseki=yoko*tate; System.out.println("長方形の面積="+cmenseki); } public void smen( ){//メソッド yoko=50; tate=60; int smenseki=yoko*tate/2; System.out.println("三角形の面積="+smenseki); } } class Keisan extends Zukei{//Keisan クラスはサブクラス public Keisan( ){//コンストラクタ System.out.println("面積を求めます"); System.out.println("初期値 横="+yoko+" 縦="+tate); } public void seimen(int r){//メソッド int k=r*r; System.out.println("一辺 "+r+" の正方形の面積="+k); } } public class TestClass { public static void main(String[ ] args) {//main メソッド // TODO 自動生成されたメソッド・スタブ Keisan zu=new Keisan( );//オブジェクトの作成 コンストラクタの実行 System.out.println("yoko="+zu.yoko); zu.cmen( ); System.out.println("yoko="+zu.yoko); zu.smen( ); System.out.println("yoko="+zu.yoko); zu.seimen(5); } } P236 class MyClass { int x=20; public MyClass( ){//コンストラクタ System.out.println("スーパークラスにあるコンストラクタ 1 です"); } public MyClass(int x){//コンストラクタ this( );//上の MyClass( )コンストラクタを呼び出す System.out.println("スーパークラスにあるコンストラクタ 2 です x="+x); } void func( ) {//メソッド System.out.println("MyClass はスーパークラスです"); } } class MySubClass extends MyClass {//スーパークラスを継承したサブクラス int x=0; int y; int z; public MySubClass( ){//サブクラスのコンストラクタ super( ); System.out.println("サブクラスにあるコンストラクタです"); } void func( ) {//メソッド y=this.x; System.out.println("MySubClass はサブクラスです y="+y); z=super.x; System.out.println("MySubClass はサブクラスです z="+z); super.func( ); } } public class SuperThis { public static void main(String[ ] args) {//main メソッド // TODO 自動生成されたメソッド・スタブ MySubClass msc=new MySubClass( ); MyClass mc=new MyClass( ); msc.func( ); int w=msc.x; System.out.println("w="+w); w=mc.x; System.out.println("w="+w); mc.func( ); } } P239 //抽象クラスはオブジェクトを作成できません abstract class Animal{//抽象クラス int speed; abstract void cry( );//抽象メソッドは定義のみ書きます abstract void action( );//抽象メソッドは定義のみ書きます public void speed(int s){ speed=s; System.out.println("歩く速さ speed="+speed+" km/h"); } } //サブクラスで cry( )、action( )抽象メソッドを詳しく書きます //抽象クラスを継承した抽象メソッドの内容をサブクラスで //定義してオーバーライドします。このようにしてはじめて //オブジェクトを作成できます。 class dog extends Animal{ public void cry( ){ System.out.println("ワンワン"); } public void action( ){ System.out.println("子供と散歩しています。"); } } class cat extends Animal{//サブクラスで cry( )、action( )抽象メソッドを詳しく書きます public void cry( ){ System.out.println("ニャーオ"); } public void action( ){ System.out.println("縁側で昼寝をしています。"); } } public class AbstractTest { public static void main(String[ ] args) { dog dg=new dog( );//dog のオブジェクトを作成 cat ct=new cat( );//cat のオブジェクトを作成 dg.cry( ); dg.action( ); dg.speed(4); ct.cry( ); ct.action( ); ct.speed(3); } } P242 interface Animal{//Animal インターフェース文 void cry( );//abstract が付いていなくても抽象メソッドとして扱われます void action( );//abstract が付いていなくても抽象メソッドとして扱われます } interface Speed{//Speed インターフェース文 void spe(int s);//abstract が付いていなくても抽象メソッドとして扱われます } //Animal、Speed インターフェースを実装した dog クラス //このクラスで cry( )、action( )、spe( )抽象メソッドを詳しく書きます class dog implements Animal,Speed{ public dog( ){//コンストラクタ System.out.println("私は犬です。"); } public void cry( ){//メソッド System.out.println("ワンワン"); } public void action( ){//メソッド System.out.println("子供と散歩しています。"); } public void spe(int speed){//メソッド System.out.println("歩く速さ speed="+speed+" km/h"); } } //Animal、Speed インターフェースを実装した cat クラス //このクラスで cry( )、action( )、spe( )抽象メソッドを詳しく書きます class cat implements Animal,Speed{ public cat( ){//コンストラクタ System.out.println("私は猫です。"); } public void cry( ){//メソッド System.out.println("ニャーオ"); } public void action( ){//メソッド System.out.println("縁側で昼寝をしています。"); } public void spe(int speed){//メソッド System.out.println("歩く速さ speed="+speed+" km/h"); } } public class InterfaceTest { public static void main(String[ ] args) { // TODO 自動生成されたメソッド・スタブ dog dg=new dog( );//dog のオブジェクトを作成 dg.cry( ); dg.action( ); dg.spe(4); cat ct=new cat( );//cat のオブジェクトを作成 ct.cry( ); ct.action( ); ct.spe(3); } } P245 import java.text.SimpleDateFormat; import java.util.*; // Runnable インターフェースを実装し、run( )メソッドを定義 class RunA implements Runnable { //スレッド実行する run( )メソッド public void run( ) { // SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // System.out.println("RunA="+DF.format(new Date( ))); System.out.println("A Start"); for (int i=0; i <= 2; i++) { System.out.println("A: " + i); } try { Thread.sleep(1000); // 1秒間停止 } catch (InterruptedException e) { System.out.println(e); } // System.out.println("RunA="+DF.format(new Date( ))); System.out.println("A End"); } } class RunB implements Runnable { public void run( ) { // SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // System.out.println("RunB="+DF.format(new Date( ))); System.out.println(" B Start"); for (int i=0; i <= 2; i++) { System.out.println(" B: " + i); } try { Thread.sleep(1000); // 1 秒間停止 } catch (InterruptedException e) { System.out.println(e); } // System.out.println("RunB="+DF.format(new Date( ))); System.out.println(" B End"); } } class RunC implements Runnable { public void run( ) { // SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // System.out.println("RunC="+DF.format(new Date( ))); System.out.println(" C Start"); for (int i=0; i <= 2; i++) { System.out.println(" C: " + i); } try { Thread.sleep(50); // 50msec 間停止 } catch (InterruptedException e) { System.out.println(e); } // System.out.println("RunC="+DF.format(new Date( ))); System.out.println(" C End"); } } //Thread クラスを継承 class RunD extends Thread{ public void run( ) { // SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // System.out.println("RunD="+DF.format(new Date( ))); System.out.println(" D Start"); for (int i=0; i <= 2; i++) { System.out.println(" D: " + i); } try { sleep(5000); // 5 秒間停止 } catch (InterruptedException e) { System.out.println(e); } // System.out.println("RunD="+DF.format(new Date( ))); System.out.println(" D End"); } } class ThreadTest { public static void main(String[ ] args) throws InterruptedException { SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); System.out.println("main="+DF.format(new Date( ))); System.out.println("main( )メソッド 開始"); //RunA クラスのオブジェクトを生成 RunA runA = new RunA( ); RunB runB = new RunB( ); RunC runC = new RunC( ); RunD runD = new RunD( ); // System.out.println("main Thread="+DF.format(new Date( ))); //Thread クラスのオブジェクトを生成 Thread threadA = new Thread(runA); Thread threadB = new Thread(runB); Thread threadC = new Thread(runC); // System.out.println("main start="+DF.format(new Date( ))); System.out.println("スレッドの開始"); // スレッドの開始 threadA.start( );//start( )メソッドを呼び出し RunA クラスの run( )を実行 threadB.start( ); threadC.start( ); runD.start( ); try { //join( )メソッドを使い threadA の sleep 時間に関係なくスレッド //が終わるまで待ち main( )メソッドを終了 threadA.join( ); // System.out.println("main A_join="+DF.format(new Date( ))); threadB.join( ); // System.out.println("main B_join="+DF.format(new Date( ))); threadC.join( ); // System.out.println("main C_join="+DF.format(new Date( ))); runD.join( ); // System.out.println("main D_join="+DF.format(new Date( ))); Thread.sleep(1000); // 1 秒間停止 } catch (InterruptedException e) { System.out.println(e); } System.out.println("main 終了="+DF.format(new Date( ))); System.out.println("main( )メソッド 終了"); } } P260 の 18 の解答 class Human{ public Human( ){ System.out.println("私は考えています。"); } public void HumanA(String name){ System.out.println("名前は "+name); } public void HumanA(String name,int age){ System.out.println("名前は "+name+" 年齢は "+age+" 歳です。"); } public void HumanA(String name,int age,int month){ System.out.println("名前は "+name+" 年齢は } } public class OverloadingTest { public static void main(String[ ] args) { // TODO 自動生成されたメソッド・スタブ Human hu = new Human( ); hu.HumanA("tanaka",17); hu.HumanA("tanaka",17,12); } } "+age+" 歳で、誕生月は"+month+"月です。"); P261 の 19 の解答 class Human{ String name=""; int age; int month; public Human( ){ //コンストラクタ 引数なし System.out.println("私は考えています。"); } public Human(String n){ //コンストラクタ 引数1つ name=n; System.out.println("名前は "+name+"です。"); } public Human(String n,int a){ //コンストラクタ 引数2つ name=n; age=a; System.out.println("名前は "+name+" 年齢は "+age+" 歳です。"); } public Human(String n,int a,int m){ //コンストラクタ 引数3つ name=n; age=a; month=m; //this.name=name; //this.age=age; //this.month=month; System.out.println("名前は "+name+" 年齢は "+age+" 歳で、誕生月は"+month+"月です。"); } public void disp( ){ // メソッド if(name.equals("")){ System.out.println("お名前がわかりません。こんにちは"); }else{ System.out.println(name+"さんですか。こんにちは"); } } } public class OverloadingTest2 { public static void main(String[ ] args) { // TODO 自動生成されたメソッド・スタブ //コンストラクタのオブジェクトを作成するとコンストラクタを実行 Human hu0 = new Human( ); Human hu1 = new Human("suzuki"); Human hu2 = new Human("tanaka",17); Human hu3 = new Human("harada",20,12); hu0.disp( );//① hu1.disp( );//② hu2.disp( );//③ hu3.disp( );//④ } }
© Copyright 2024 ExpyDoc