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

发布时间 - 2026-01-11 02:54:28    点击率:

本文实例讲述了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图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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


# Android  # 弧形  # 绘制  # android图像绘制(七)ClipRect局部绘图/切割原图绘制总结  # Android绘图之Paint的使用方法详解  # Android 通过onDraw实现在View中绘图操作的示例  # Android编程之OpenGL绘图技巧总结  # Android自定义View绘图实现渐隐动画  # 简单实现Android绘图板  # Android UI效果之绘图篇(一)  # Android绘图常用方法汇总  # Android编程之绘图canvas基本用法示例  # Android绘图技巧使用详解  # 进阶  # 下午  # 相关内容  # 矩形框  # 感兴趣  # 给大家  # 自定义  # 如图  # 较小  # 更多关于  # 解决方法  # 所述  # 图像处理  # 程序设计  # 讲述了  # View  # length  # private  # SampleView  # Bundle 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  网站建设整体流程解析,建站其实很容易!  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  如何在新浪SAE免费搭建个人博客?  浅析上传头像示例及其注意事项  Laravel安装步骤详细教程_Laravel环境搭建指南  长沙做网站要多少钱,长沙国安网络怎么样?  利用JavaScript实现拖拽改变元素大小  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel如何实现事件和监听器?(Event & Listener实战)  如何快速选择适合个人网站的云服务器配置?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  大学网站设计制作软件有哪些,如何将网站制作成自己app?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  jquery插件bootstrapValidator表单验证详解  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  深圳网站制作的公司有哪些,dido官方网站?  Laravel如何使用Collections进行数据处理?(实用方法示例)  手机网站制作与建设方案,手机网站如何建设?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel怎么使用Intervention Image库处理图片上传和缩放  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何用景安虚拟主机手机版绑定域名建站?  JS去除重复并统计数量的实现方法  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel怎么使用artisan命令缓存配置和视图  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  香港服务器部署网站为何提示未备案?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  BootStrap整体框架之基础布局组件  音乐网站服务器如何优化API响应速度?  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  javascript事件捕获机制【深入分析IE和DOM中的事件模型】