自定义View-4-重写onDraw
2016-04-23 11:20
281 查看
效果图
页面代码
public class SouthView extends View { private Paint mPaint; private int mRadius; private int mCirclrRadius; private float mDegrees=0; public SouthView(Context context) { super(context); } public SouthView(Context context, AttributeSet attrs) { super(context, attrs); } public SouthView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); int width = canvas.getWidth(); mRadius = width / 2; mCirclrRadius = mRadius - 15; canvas.translate(width / 2, width / 2);//移动画布原点 mPaint = new Paint(); mPaint.setColor(getResources().getColor(R.color.bg_black));//设置画笔颜色 mPaint.setStyle(Paint.Style.FILL);//设置实心 mPaint.setAntiAlias(true);//抗锯齿 canvas.drawCircle(0, 0, mRadius, mPaint);//以原点为圆心画圆 mPaint.setColor(Color.WHITE); mPaint.setStrokeWidth(5); mPaint.setStyle(Paint.Style.STROKE); RectF rectF = new RectF(-mCirclrRadius, -mCirclrRadius, mCirclrRadius, mCirclrRadius); for (int i = 0; i < 4; i++) { canvas.drawArc(rectF, 10, 70, false, mPaint); canvas.rotate(90); } Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_south); Matrix matrix = new Matrix(); float f = (float) width / bitmap.getWidth(); matrix.postScale(f, f);//缩小至相应比例 Bitmap dstbmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); canvas.rotate(mDegrees++); canvas.drawBitmap(dstbmp, -bitmap.getWidth() * f / 2, -bitmap.getWidth() * f / 2, mPaint); canvas.rotate(-mDegrees*5); } public void rotateBmp(){ while (true){ postInvalidate();//子线程更新UI } } }
使用方法
southView=(SouthView)view.findViewById(R.id.view_south); new Thread(new Runnable() { @Override public void run() { southView.rotateBmp(); } }).start();
如果你喜欢我的风格,还可以看下这篇文章canvas和paint画劳力士表盘
相关文章推荐
- 自定义View-3-重写onLayout
- Post/Redirect/Get pattern | PRG 模式
- percona 实用工具之pt-kill使用介绍
- 信息安全之安全协议和认证服务
- 318. Maximum Product of Word Lengths
- as、as!、as?三种类型转换操作符使用详解
- Twisted源码分析2
- EhCache 分布式缓存/缓存集群
- Spring In Action
- GridBagLayout 布局精髓
- 自定义View-2-重写onMeasure
- 自定义View-1-动态添加view
- 机器学习------平台和语言选择
- Android前端人员与后台开发的撕逼(一)
- rsync常见错误总结
- POJ 1328 Radar Installation 题解
- 欢迎使用CSDN-markdown编辑器
- [从头学数学] 第191节 空间向量与立体几何
- jQuery Easing 使用方法及其图解
- 自定义View-序言-你需要的知识点