月齢計算アプリ ver.2
まだタイムゾーンの問題とグラフィックスで描くという課題はあるが、とりあえず。(※2011/4/3改訂)
package jp.throwordie.moonphase; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import jp.throwordie.moonphase.R; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { private static int offset = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dispPhase(); Button button1 = (Button)findViewById(R.id.Button01); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { offset = 0; dispPhase(); } }); Button button2 = (Button)findViewById(R.id.Button02); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { offset++; dispPhase(); } }); } @Override protected void onResume() { super.onResume(); offset = 0; dispPhase(); } private void dispPhase(){ TextView textView = (TextView)findViewById(R.id.TextView01); Calendar cal = new GregorianCalendar(); if(offset > 0) { cal.add(Calendar.DATE, offset); } Date date = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M/d"); Date date0 = new GregorianCalendar(2010, 7-1, 1, 0, 0, 0).getTime(); double phase = (((date.getTime() - date0.getTime()) / (3600 * 24 * 1000)) + 18.7) % 29.530589; DecimalFormat df = new DecimalFormat("##.#"); textView.setText("DATE: " + sdf.format(date) + "\nPHASE: " + df.format(phase) + "days"); View view = (View)findViewById(R.id.SurfaceView01); int id = 0; int deg = 0; int PHASE_TABLE [] = { R.drawable.moon00, // 0 R.drawable.moon00, R.drawable.moon02, R.drawable.moon02, R.drawable.moon04, R.drawable.moon04, // 5 R.drawable.moon06, R.drawable.moon07, R.drawable.moon07, R.drawable.moon08, R.drawable.moon10, // 10 R.drawable.moon10, R.drawable.moon12, R.drawable.moon13, R.drawable.moon13, R.drawable.moon15, // 15 }; if(phase < 15) { id = PHASE_TABLE[(int)phase]; deg = 0; } else { id = PHASE_TABLE[30 - (int)phase]; deg = 180; } Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), id); Matrix matrix = new Matrix(); matrix.postRotate(deg); bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(), matrix,true); BitmapDrawable bd = new BitmapDrawable(this.getResources(), bitmap); view.setBackgroundDrawable(bd); } }