android 中使用Canvas 画圆
来源:互联网 发布:行星和恒星的区别知乎 编辑:程序博客网 时间:2024/06/05 08:46
package com.example.wireframe;import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Paint.Style;import android.graphics.RectF;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.view.ViewTreeObserver.OnPreDrawListener;/** * 圆弧计分 * @author Administrator */public class HomeArc extends View { private Paint paint_black, paint_white;private RectF rectf;private float tb;private int blackColor = 0x70000000; // 底黑色private int whiteColor = 0xddffffff; // 白色private int score;private float arc_y = 0f;private int score_text;public HomeArc(Context context, int score) {super(context);init(score);}public void init(int score) {this.score = score;Resources res = getResources();tb = res.getDimension(R.dimen.historyscore_tb);//画出背景颜色paint_black = new Paint();paint_black.setAntiAlias(true); //消除锯齿paint_black.setColor(blackColor); //设置背景颜色paint_black.setStrokeWidth(tb * 0.2f);paint_black.setStyle(Style.STROKE); //画出一个空心的圆 如果画出一个实心的话使用Paint.Style.FILL//画出弧形线paint_white = new Paint();paint_white.setAntiAlias(true);paint_white.setColor(whiteColor); paint_white.setTextSize(tb*6.0f);paint_white.setStrokeWidth(tb * 0.2f);paint_white.setTextAlign(Align.CENTER);paint_white.setStyle(Style.STROKE);rectf = new RectF();rectf.set(tb * 0.5f, tb * 0.5f, tb * 18.5f, tb * 18.5f);setLayoutParams(new LayoutParams((int) (tb * 19.5f), (int) (tb * 19.5f)));//View本身onDraw 方法的监听this.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {public boolean onPreDraw() {new thread(); //对绘画的监听getViewTreeObserver().removeOnPreDrawListener(this);return false;}});}protected void onDraw(Canvas c) {super.onDraw(c);c.drawArc(rectf, -90, 360, false, paint_black); //画出黑线圆c.drawArc(rectf, -90, arc_y, false, paint_white); //画出白线圆c.drawText("" + score_text, tb * 9.7f, tb * 11.0f, paint_white); //画出中间的文字//c.drawText(text, x, y, paint); 参数}class thread implements Runnable {private Thread thread;private int statek; int count;public thread() {thread = new Thread(this);thread.start();}public void run() {while (true) {switch (statek) {case 0:try {Thread.sleep(200);statek = 1;} catch (InterruptedException e) {}break;case 1:try {Thread.sleep(15);arc_y += 3.6f;score_text++;count++;//注: invalidate()是在UI线程中被调用的,而postInvalidate()是在mainThread中被调用postInvalidate();} catch (InterruptedException e) {e.printStackTrace();}break;}if (count >= score)break;}}}}
先看看效果图
在程序中中调用:
LinearLayout arc = (LinearLayout) findViewById(R.id.arc);//圆弧计分
arc.addView(new HomeArc(this, 88));
0 0
- android 中使用Canvas 画圆
- Android 中Canvas的使用
- Android中canvas.save()和canvas.restore()的使用
- Android中canvas.save()和canvas.restore()的使用
- android canvas中translate函数的使用
- android中Canvas使用drawBitmap绘制图片
- android中Canvas使用drawBitmap绘制图片
- android中Canvas使用drawBitmap绘制图片
- Android 中Canvas.drawBitmap()的使用
- android中Canvas使用drawBitmap绘制图片
- android 中Canvas使用drawBitmap画图
- Android中Canvas绘图之PorterDuffXfermode使用
- Android中Canvas画图
- android canvas的使用
- Android-Canvas使用技巧
- Android--使用Canvas绘图
- Android Canvas使用
- Android Canvas使用
- iOS8中使用CoreLocation定位
- mongodb同关系型数据库的映射对比
- Python 列表
- LayoutInflater.from(this)的用法--inflate就相当于将一个xml中定义的布局找出来.
- shell awk 用法总结
- android 中使用Canvas 画圆
- proguard去掉调试代码
- 解决JSP中文乱码问题
- 打开辣妈萌宝很好地承载了宝宝所有的幸福记录
- c++回调函数 callback
- linux 系统监控、诊断工具之 top 详解
- 使用 Hadoop 和 Hive 获取机器数据
- 解决url传递中文参数乱码问题
- Python 元组