import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.os.Handler; /** メインクラス */ public class TestCircle extends Activity implements OnClickListener { private final int FP = ViewGroup.LayoutParams.FILL_PARENT; private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; private LinearLayout.LayoutParams createParam(int w, int h) { return new LinearLayout.LayoutParams(w, h); } /** 画面描画用 View */ MyCircleView view; /** Timer 処理用のハンドラ */ Handler handler = new Handler(); Button btnStop; Button btnStart; Timer timer; /** Activityが生成された時に呼ばれる */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); setContentView(linearLayout); btnStop = new Button(this); btnStop.setText("stop "); btnStop.setOnClickListener(this); linearLayout.addView(btnStop, createParam(FP, WC)); btnStart = new Button(this); btnStart.setText("start"); btnStart.setOnClickListener(this); linearLayout.addView(btnStart, createParam(FP, WC)); // View の設定 view = new MyCircleView(getApplication()); // setContentView(view); linearLayout.addView(view, createParam(WC, WC)); // Timer の設定をする timer = new Timer(false); timer.schedule(new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { // 再描画 view.invalidate(); } }); } }, 0, 100);// ミリ秒でタイマー設定 } @Override public void onClick(View v) { Button btn = (Button) v; // stopボタン if (btn == btnStop) { timer.cancel(); timer = null; // startボタン }else if (btn == btnStart) { timer = new Timer(false); timer.schedule(new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { // 再描画 view.invalidate(); } }); } }, 0, 100);// ミリ秒でタイマー設定 } } } /** View クラス */ class MyCircleView extends View { // View の初期化 public MyCircleView(Context context) { super(context); setFocusable(true); } public int displayWidth; public int displayHeight; private int alpha = 0;// 透明度 private int alpha2 = 255;// 透明度 // 実際に描画を行うメソッド protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 背景色の設定 canvas.drawColor(Color.WHITE); // 描画オブジェクトの生成 Paint paint = new Paint(); paint.setAntiAlias(true); // 円を適当な位置に描画する paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLUE); // float cx = (float)Math.random() * displayWidth; // float cy = (float)Math.random() * displayHeight; alpha += 5;// 透明度を変更 paint.setAlpha(alpha); // 画面サイズを取得 canvas.drawCircle(150, 150, 30, paint); Log.d("alpha_number", alpha + ""); } /** 画面サイズが変更されたときに呼び出されるメソッド */ protected void onSizeChanged(int w, int h, int oldw, int oldh) { displayWidth = w; displayHeight = h; } }