画个钟,用Android
package net.tianyu.android.clock;import java.util.Calendar;import java.util.TimeZone;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.widget.RelativeLayout;public class AndroidClock extends Activity { private HourView hourView; private Handler hourHandler; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout absLayout = new RelativeLayout(this); hourView = new HourView(this); hourHandler = new Handler(); hourHandler.post(updateHour); absLayout.addView(hourView, new RelativeLayout.LayoutParams(416, 416)); setContentView(absLayout); } private Runnable updateHour = new Runnable() { public void run() { hourView.update(); hourHandler.postDelayed(updateHour, 1000); } }; class HourView extends View { Matrix mHourMatrix = new Matrix(); Matrix mMinuteMatrix = new Matrix(); Bitmap mBmpHour; Bitmap mBmpMinute; Bitmap mBmpBackground; int mWidth = 173; int mHeight = mWidth; int centerX = 145; int centerY = 200; public HourView(Context context) { super(context); mBmpHour = BitmapFactory.decodeResource(getResources(), R.drawable.hour); mBmpMinute = BitmapFactory.decodeResource(getResources(), R.drawable.minute); mBmpBackground = BitmapFactory.decodeResource(getResources(), R.drawable.background); } public void update() { postInvalidate(); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); p.setColor(Color.RED); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+9:00")); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); float hourRotate = 270.0f + hour * 30.0f + minute / 60.0f * 30.0f; float minuteRotate = 270.0f + minute * 6.0f; canvas.drawBitmap(mBmpBackground, 0, 0, p); mHourMatrix.postRotate(hourRotate, 17, 7); mMinuteMatrix.postRotate(minuteRotate, 17, 7); mHourMatrix.postTranslate(centerX, centerY); mMinuteMatrix.postTranslate(centerX, centerY); canvas.drawBitmap(mBmpHour, mHourMatrix, p); canvas.drawBitmap(mBmpMinute, mMinuteMatrix, p); mHourMatrix.postTranslate(-1 * centerX, -1 * centerY); mMinuteMatrix.postTranslate(-1 * centerX, -1 * centerY); mHourMatrix.postRotate(-1.0f * hourRotate, 17, 7); mMinuteMatrix.postRotate(-1.0f * minuteRotate, 17, 7); } }}