月齢計算アプリ 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);
        
    }

}