软件编程
位置:首页>> 软件编程>> Android编程>> Android编程绘图操作之弧形绘制方法示例

Android编程绘图操作之弧形绘制方法示例

作者:迟做总比不做强  发布时间:2021-10-06 00:33:45 

标签:Android,弧形,绘制

本文实例讲述了Android编程绘图操作之弧形绘制方法。分享给大家供大家参考,具体如下:


/**
* 绘制弧形图案
* @description:
* @author ldm
* @date 2016-4-25 下午4:37:01
*/
public class ArcsActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(new SampleView(this));
 }
 /**
  * 自定义绘制图案的View
  *
  * @description:
  * @author ldm
  * @date 2016-4-25 下午4:19:40
  */
 private static class SampleView extends View {
   // 画圆形图案的画笔数组
   private Paint[] mPaints;
   // 画矩形的画笔
   private Paint mFramePaint;
   // 是否以矩形中心画图
   private boolean[] mUseCenters;
   // 矩形框数组
   private RectF[] mOvals;
   // 上面较大的矩形框
   private RectF mBigOval;
   // 画圆弧起点
   private float mStart;
   // 画圆弧角度
   private float mSweep;
   // 画大图形对应角标index
   private int mBigIndex;
   // 角度变化增量
   private static final float ANGLE_STEP = 3;
   // 初始角度
   private static final float START_ANGLE = 15;
   public SampleView(Context context) {
     super(context);
     mPaints = new Paint[4];
     mUseCenters = new boolean[4];
     mOvals = new RectF[4];
     mPaints[0] = new Paint();
     mPaints[0].setAntiAlias(true);// 设置抗紧钜齿
     mPaints[0].setStyle(Paint.Style.FILL);// 设置画笔填充风格
     mPaints[0].setColor(0x88FF0000);// 设置颜色
     mUseCenters[0] = false;
     mPaints[1] = new Paint(mPaints[0]);
     mPaints[1].setColor(0x8800FF00);
     mUseCenters[1] = true;
     mPaints[2] = new Paint(mPaints[0]);
     mPaints[2].setStyle(Paint.Style.STROKE);// 设置画笔空心风格
     mPaints[2].setStrokeWidth(4);// 设置画笔宽度
     mPaints[2].setColor(0x880000FF);// 设置颜色
     mUseCenters[2] = false;
     mPaints[3] = new Paint(mPaints[2]);
     mPaints[3].setColor(0x88888888);
     mUseCenters[3] = true;
     mBigOval = new RectF(40, 10, 280, 250);// 初始化较大的矩形
     mOvals[0] = new RectF(10, 270, 70, 330);// 初始化4个较小矩形
     mOvals[1] = new RectF(90, 270, 150, 330);
     mOvals[2] = new RectF(170, 270, 230, 330);
     mOvals[3] = new RectF(250, 270, 310, 330);
     mFramePaint = new Paint();
     mFramePaint.setAntiAlias(true);
     mFramePaint.setStyle(Paint.Style.STROKE);
     mFramePaint.setStrokeWidth(0);
   }
   @Override
   protected void onDraw(Canvas canvas) {
     canvas.drawColor(Color.WHITE);
     // 画大矩形
     canvas.drawRect(mBigOval, mFramePaint);
     // 在大矩形分别 画4个圆弧图形
     canvas.drawArc(mBigOval, mStart, mSweep, mUseCenters[mBigIndex],
         mPaints[mBigIndex]);
     for (int i = 0; i < 4; i++) {
       canvas.drawRect(mOvals[i], mFramePaint);// 画四个小矩形
       canvas.drawArc(mOvals[i], mStart, mSweep, mUseCenters[i],// 在四个小矩形中分别画圆弧
           mPaints[i]);
     }
     mSweep += ANGLE_STEP;// 弧度改变
     if (mSweep > 360) {// 弧度控制
       mSweep -= 360;
       mStart += START_ANGLE;
       if (mStart >= 360) {
         mStart -= 360;
       }
       mBigIndex = (mBigIndex + 1) % mOvals.length;
     }
     invalidate();
   }
 }
}

静态效果如图:

Android编程绘图操作之弧形绘制方法示例

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/true100/article/details/51243324

0
投稿

猜你喜欢

  • 前言从windows窗口的概念开始,通过对比去理解Android窗口体系,本文没有深入源码,重在理解概念代码都是抄来抄去,概念也是互相借鉴
  • 相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢。这时候就需要我们了来找出问题所在了。绝大部分都是代码问题导致的。
  • 本文实例讲述了JAVA基于数组实现的商品信息查询功能。分享给大家供大家参考,具体如下:综合一维数组和二维数组的相关知识,以及数组排序的多种算
  • 当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如
  • 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工
  • 简介在实现登录功能时,一般为了安全都会设置验证码登录,为了防止某个用户用特定的程序暴力破解方式进行不断的尝试登录。常见验证码分为图片验证码和
  • 目录单一职责原则接口隔离原则开闭原则里氏替换原则依赖倒置原则迪米特法则笔者作为一个菜鸟,会尝试以简单的代码和容易理解的语句去解释这几种原则的
  • Java中Static关键字的一些用法详解1. Static 修饰类属性,因为静态成员变量可以通过类名+属性名调用,非静态成员变量不能通过类
  • 原理简介Java中提供了Calendar这个专门用于对日历进行操作的类,那么这个类有什么特殊的地方呢,首先我们来看Calendar的声明:p
  • 本文实例为大家分享了Unity实现文本转贴图的具体代码,供大家参考,具体内容如下导入字体导入ttf字体,修改Character为Custom
  • 字体池的应用,主要是为了解决字体不断创建导致句柄泄漏/内存泄漏的问题,这个问题在Android上也同样存在。经测试,C# WinForm原生
  • Google在Android 4.4版本加入了半透明的界面样式,在Android 5.0的时候推出了Material Design的概念。这
  • 什么是代理模式代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。代理,顾名思义就是一个真实对象会存在一个代理对象
  • 本文实例为大家分享了Android Scroller实现弹性滑动的具体代码,供大家参考,具体内容如下首先看下实现效果,可以看到当我们手指松开
  • 关于mybatis基础我们前面几篇博客已经介绍了很多了,今天我们来说一个简单的问题,那就是mybatis中的缓存问题。mybatis本身对缓
  • 以前,如果我们希望构建支持foreach枚举的自定义集合,只能实现IEnumerable接口(可能还有IEnumerator()),返回值还
  • Feign其他功能-超时设置Feign 底层依赖于 Ribbon 实现负载均衡和远程调用。Ribbon默认1秒超时。超时配置:ribbon:
  • RecyclerView是Android 5.0的新特性,可以直接代替ListView与GridView,并且能够实现瀑布流的布局,感觉Re
  • Glide开源框架是Google推荐的图片加载和缓框架,其在Github上的开源地址是:https://github.com/bumptec
  •  一、容器初始化1、源码分析在jdk8的ConcurrentHashMap中一共有5个构造方法,这四个构造方法中都没有对内部的数组
手机版 软件编程 asp之家 www.aspxhome.com