画图
http://www.2cto.com/kf/201404/296296.html
http://blog.csdn.net/tianjian4592/article/details/44783283
http://blog.csdn.net/wangfayinn/article/details/8685310
http://www.cnblogs.com/tianzhijiexian/p/4298660.html

实现一个自定义的进度条

public class ArcProgress extends View {private Paint paint;private RectF rectF = new RectF();private float strokeWidth;private int progress = 0;private int max;private float arcAngle;private final float default_stroke_width;private final int default_max = 100;private final float default_arc_angle = 360;public ArcProgress(Context context) {this(context, null);}public ArcProgress(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ArcProgress(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);default_stroke_width = Utils.dp2px(context, 4);TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ArcProgress, defStyleAttr, 0);initByAttributes(attributes);attributes.recycle();}protected void initByAttributes(TypedArray attributes) {arcAngle = attributes.getDimension(R.styleable.ArcProgress_arc_angle,default_arc_angle);setMax(attributes.getInt(R.styleable.ArcProgress_arc_max, default_max));setProgress(attributes.getInt(R.styleable.ArcProgress_arc_progress, 0));strokeWidth = attributes.getDimension(R.styleable.ArcProgress_arc_stroke_width, default_stroke_width);}@Overridepublic void invalidate() {super.invalidate();}public int getProgress() {return progress;}public void setProgress(int progress) {this.progress = progress;if (this.progress > getMax()) {this.progress %= getMax();}invalidate();}public int getMax() {return max;}public void setMax(int max) {if (max > 0) {this.max = max;invalidate();}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);float startAngle = 90 - arcAngle / 2f;float finishedSweepAngle = progress / (float) getMax() * arcAngle;float finishedStartAngle = startAngle;int width = getMeasuredWidth();rectF.set(strokeWidth / 2f, strokeWidth / 2f,getMeasuredWidth() - strokeWidth / 2f,getMeasuredWidth() - strokeWidth / 2f);paint = new Paint();paint.setAntiAlias(true);paint.setStrokeWidth(strokeWidth);paint.setStyle(Paint.Style.STROKE);paint.setStrokeCap(Paint.Cap.ROUND);Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.uu_loading_bg);bitmap = Bitmap.createScaledBitmap(bitmap, width, width, false);// 可以使用图片座位画笔 注意图片可以设置为平铺 拉伸这些属性paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));// 可以使用变换属性来实现一些效果canvas.scale((float) 0.9, (float) 0.9, width / 2, width / 2);// 绘制圆弧 等矩形图形canvas.drawArc(rectF, startAngle, arcAngle, false, paint);bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.uu_loading);bitmap = Bitmap.createScaledBitmap(bitmap, width, width, false);paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));canvas.drawArc(rectF, finishedStartAngle, finishedSweepAngle, false, paint);// 可以对位图来进行一些变换 效果然后绘制上去Bitmap bitmap_loadingpoint = BitmapFactory.decodeResource(getResources(), R.drawable.uu_loadingpoint);Matrix matrix = new Matrix();matrix.setTranslate(bitmap_loadingpoint.getHeight() / 2, bitmap_loadingpoint.getHeight() / 2);matrix.postRotate(finishedSweepAngle + 45, getWidth() / 2, getWidth() / 2);canvas.drawBitmap(bitmap_loadingpoint, matrix, null);}
}

转载于:https://www.cnblogs.com/xbx2015/p/5716574.html

Android Canvas 绘图相关推荐

  1. Android Canvas绘图

    以图形处理来说,我们最常用到的就是在一个View上画一些图片.形状或者自定义的文本内容,这里我们都是使用Canvas来实现的.你可以获取View中的Canvas对象,绘制一些自定义形状,然后调用Vie ...

  2. Android中Canvas绘图之Shader使用图文详解

    概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...

  3. android canvas画图gc,自定义控件绘图(Canvas,Paint,Region等)篇一

    参考: 关于绘图相关的 Paint.Canvas多少都接触过一些,但没有系统的学习过,每次都是边查边用,这里都是参考大神的博客而成的学习记录,(采用Kotlin语言,来编写,kotlin确实有些坑,但 ...

  4. 【Android UI】Canvas 画布 ⑨ ( Canvas 绘图坐标系平移实例 )

    文章目录 一.Canvas 绘图坐标系平移实例 二.代码示例 Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ; 其中 图层栈 又称为 Layer 栈 ; Canv ...

  5. Android中Canvas绘图基础详解(附源码下载)

    看到了一篇比较详细的Canvas文章,转过来方便自己查看. 源地址:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果 ...

  6. Android关于绘图中Shader 的效果(中级)

    Android关于绘图中Shader 的效果(中级) 关于绘图中Shader 的效果 本人对API中Shaser的参数理解不够深刻 所以只能测试来看 效果一下就看出来了 Shader mShade=n ...

  7. Android原生绘图进度条+简单自定义属性代码生成器

    零.前言 1.感觉切拼字符串是个很有意思的事,好的拼接方式可以自动生成一些很实用的东西 2.本文自定义控件并不是很高大上的东西,目的在于计录自定义控件的书写规范与行文流程 3.建议大家自定义控件时自定 ...

  8. android编程绘图,Android编程绘图操作之弧形绘制方法示例

    本文实例讲述了Android编程绘图操作之弧形绘制方法.分享给大家供大家参考,具体如下: /** * 绘制弧形图案 * @description: * @author ldm * @date 2016 ...

  9. Android--使用Canvas绘图

    前言 除了使用已有的图片之外,Android应用常常需要在运行时根据场景动态生成2D图片,比如手机游戏,这就需要借助于Android2D绘图的支持.本篇博客主要讲解一下Android下使用Canvas ...

最新文章

  1. 问题:org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0
  2. tfpose与openpose区别_人体姿态识别--Openpose+Tensorflow
  3. eclipse连接mysql_专题一、flask构建mysql数据库正确姿势
  4. js学习小计1-onbeforeunload
  5. N多校2018d4t7Maximum Mode
  6. 小程序数据框有重影_关于拖动滚动条编辑框数据重影的问题
  7. Python实战RBF神经网络
  8. StataIC——协整检验与误差修正模型
  9. Cell Genomics封面|北大吴华君课题组利用空间多组学技术解析肿瘤内空间异质性...
  10. android 双击返回键退出 拦截menu键
  11. 论文解读:iDRNA-ITF:基于诱导和转移框架识别蛋白质中的DNA和RNA结合残基
  12. container_of()宏
  13. Playing Atari with Deep Reinforcement Learning 学习笔记
  14. 风控Python绘图技法代码示例
  15. odb 使用指南(三)持久化对象的处理
  16. stm32f407zgt6的2.2LCD实例1.2:LCD屏幕程序讲解之LCD驱动底层代码
  17. fr4速度 微带线_微带线和带状线(microstrip and stripline)
  18. 基于Eureka服务治理的高可用性注册中心搭建
  19. 02-gitgitlab二次认证
  20. OSChina 周三乱弹 ——程序员从入职到跑路

热门文章

  1. android 在xml文件中引用自定义View
  2. Android Studio通过JNI调用NDK程序
  3. Android 通过 annotation ViewInject
  4. linux中进程退出函数:exit()和_exit()的区别
  5. 已解决:大家使用原子哥的延时函数delay_ms,delay_us会出现进入延时函数出不来的情况
  6. C/C++ 中的0长数组(柔性数组)
  7. 子路由里嵌套子路由、嵌套多重子路由
  8. Bytomd 助记词恢复密钥体验指南
  9. Hystrix使用Commond的三种方式
  10. 2017-2018-2 20165211 实验五《网络编程与安全》实验报告