效果图如下:


以下是代码详细:

package org.example.fanqietime;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.os.Handler;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;public class OvalTimeView extends SurfaceView implements SurfaceHolder.Callback {public OvalTimeView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubholder = this.getHolder();holder.addCallback(this);}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stubispause = false;}@SuppressLint("WrongCall")@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubinit();new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubonDraw();}}).start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubispause = true;}private int width;private int height;private int radius,radius2;private int zxX = 0;private int zxY = 0;public SurfaceHolder holder;private boolean ispause = false;private float textSixe1,textSixe2;public void init(){width = getWidth();height = getHeight();if(width >= height)radius = height / 2 - 10;elseradius = width / 2 - 10;zxX = width / 2;zxY = height / 2;radius2 = radius - radius / 20;textSixe1 = (float) (radius * 1.0 / 2.5);textSixe2 = (float) (radius * 1.0 / 6.3);}public float angle = 0;public boolean istop = true;public int sleep = 1000;public int longtime = 0;public int finaltime = 0;public int bgcolor;private Handler thandler;public void setTHandler(Handler thandler){this.thandler = thandler;}public void setLongtime(int finaltime,int currentlong, int color){this.longtime = finaltime - currentlong;this.finaltime = finaltime;bgcolor = color;angle = (float) (angle + (360 * 1.0 / finaltime) * currentlong);istop = false;}public void startDraw(Canvas canvas, SurfaceHolder holder){if(!ispause){canvas = holder.lockCanvas(null);//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。canvas.drawColor(bgcolor);drawWOval(canvas);drawSOval(canvas, angle);drawNOval(canvas);drawNText(canvas);holder.unlockCanvasAndPost(canvas);//结束锁定画图,并提交改变。}}//画外圆public void drawWOval(Canvas canvas){Paint paint = new Paint();paint.setColor(Color.parseColor("#FFFFFF"));paint.setStrokeWidth(2);// 设置画笔粗细paint.setStyle(Paint.Style.FILL);paint.setAntiAlias(true);  canvas.drawOval(new RectF(zxX - radius, zxY - radius, zxX + radius, zxY + radius), paint);}//画内圆public void drawNOval(Canvas canvas){Paint paint = new Paint();paint.setColor(bgcolor);paint.setStrokeWidth(2);// 设置画笔粗细paint.setStyle(Paint.Style.FILL);paint.setAntiAlias(true);  canvas.drawOval(new RectF(zxX - radius2, zxY - radius2, zxX + radius2, zxY + radius2), paint);}//画扇形圆public void drawSOval(Canvas canvas, float angle){Paint paint = new Paint();paint.setColor(bgcolor);paint.setStrokeWidth(2);// 设置画笔粗细paint.setStyle(Paint.Style.FILL);paint.setAlpha(50);paint.setAntiAlias(true);canvas.drawArc(new RectF(zxX - radius, zxY - radius, zxX + radius, zxY + radius), 270, angle, true, paint);}//画外圆public void drawNText(Canvas canvas){Paint paint = new Paint();paint.setColor(Color.parseColor("#FFFFFF"));paint.setStrokeWidth(2);// 设置画笔粗细paint.setStyle(Paint.Style.FILL);paint.setAntiAlias(true);paint.setTextSize(textSixe1);//获取文字宽度高度String str = CommonUtil.SecondsToTimeString(longtime);Rect rect = new Rect();paint.getTextBounds(str, 0, str.length(), rect);int w = rect.width();int h = rect.height();canvas.drawText(str, zxX - (w / 2), zxY + (h / 2), paint);//画工作名称str = AppApplication.getInstances().getWork().getWorkname();paint.setTextSize(textSixe2);paint.getTextBounds(str, 0, str.length(), rect);int ww = rect.width();int hw = rect.height();canvas.drawText(str, zxX - (ww / 2), zxY - hw * 2, paint);}public void onDraw(){while(true){if(!istop){Canvas canvas = null;synchronized (holder){try {startDraw(canvas , holder);angle = (float) (angle + (360 * 1.0 / finaltime));if(angle >= 360 || longtime < 0){thandler.sendEmptyMessage(1001);break;}Thread.sleep(sleep);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}longtime --;//工作时间递减}}else{Canvas canvas = null;startDraw(canvas , holder);}}}}


更多相关文章

  1. android中textview设置为多行文本时,如何让文字从最顶开始显示
  2. android 设置 dialog位置
  3. SurfaceView设置透明效果
  4. android的listView中设置line
  5. Android(安卓)RecyclerView 去掉滑动边缘阴影效果
  6. android 设置缓存工具类
  7. Android(安卓)在指定 LinearLayout 中动态添加BUTTON,并设置样式
  8. TextView之二:常用属性
  9. android:textAppearance解析

随机推荐

  1. Android数据库使用(ORMLite)
  2. android 获取应用的当前版本号&获取当前a
  3. android camer 图片回显界面照片分享到微
  4. Android 双开沙箱 VirtualApp 源码分析(三
  5. Android之复选框对话框用法实例分析
  6. Android在代码中请求root权限
  7. 在Windows XP下Eclipse中安装Android并配
  8. android + cygwin + cocos2d-x环境搭建
  9. Android底层开发之Audio HAL
  10. Android中单APK应用多进程