热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidView如何绘制

要了解View如何绘制,就需要了解canvas(画布)是什么?paint(画笔)能够做什么,想要深入了解的朋友可以参考一下

上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行。只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画出这控件"性感"的外表。那么View又是如何进行绘制了?

  要了解View如何绘制,就需要了解canvas(画布)是什么?paint(画笔)能够做什么。

  Ⅰ、canvas就是表示一块画布,你可以在上面画你所朝思暮想的东西。当我们重写onDraw方法的时候,就能够拿到一个Canvas对象,这个就是你的舞台,画你所思所想。上代码了。

@Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
  }

   当您需要对某某控件进行进行重新绘制的时候,我们只需要在这个大舞台(Canvas)调用Canvas.DrawXXX方法画出各种各样的图形。

  Ⅱ、paint就是画布上挥洒自如的画笔。要画图,得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Paint上提供许多属性和方法用来设置画笔。

  1、setAntiAlias: 设置画笔的锯齿效果。
  2、setColor: 设置画笔颜色
  3、setARGB:  设置画笔的a,r,p,g值。
  4、setAlpha:  设置Alpha值
  5、setTextSize: 设置字体尺寸。
  6、setStyle:  设置画笔风格,空心或者实心。
  7、setStrokeWidth: 设置空心的边框宽度。
  8、getColor:  得到画笔的颜色
  9、getAlpha:  得到画笔的Alpha值。

  我们既然知道了画笔与画布,通过一个短小精悍的例子来看画布和画笔怎么共同作用出一个想要的图形。老样子,上代码:

public class MyView extends View {

  private Paint paint;
  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }

  private void init() {
    paint=new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.RED);
    paint.setStrokeWidth(5);
    paint.setTextSize(28);
    
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(measureWidth(widthMeasureSpec),
        measureWidth(heightMeasureSpec));
  }

  public int measureWidth(int measureSpec) {
    int result = 0;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);
    if (specMode == MeasureSpec.EXACTLY) {
      result = specSize;
    } else {
      result = 200;
      if (specMode == MeasureSpec.AT_MOST) {
        result = Math.min(specSize, result);
      }
    }
    return result;
  }
  
  @Override
  protected void onDraw(Canvas canvas) {
    canvas.drawText("中国", 0, 80, paint);
    super.onDraw(canvas);
  }
}


上述代码,我们做了这么几件事了:

  Ⅰ、我们运用上篇文章的知识,重写了onMeasure方法,让这个简单自定义控件自适应wrap_content属性。

  Ⅱ、我们调用了OnDraw方法,拿到Canvas与paint,在view上写了"中国"文字。

  最终运行效果为:

  这就是我对Android View 如何绘制一点灼见,希望大家多提建议。


推荐阅读
  • 本文详细解释了涨停板交易(俗称“打板”)的定义、操作步骤及注意事项。涨停板交易是一种高风险高回报的投资策略,尤其在牛市中表现出色。文中不仅介绍了如何选择和买入涨停股票,还提供了三大纪律以规避风险。 ... [详细]
  • Java 中重写与重载的区别
    本文详细解析了 Java 编程语言中重写(Override)和重载(Overload)的概念及其主要区别,帮助开发者更好地理解和应用这两种多态性机制。 ... [详细]
  • 本文将带您了解Cocos家族的不同版本和分支,特别是Cocos Creator的发展历程及其核心特性,帮助初学者快速入门。 ... [详细]
  • 解决Hive操作无响应问题:drop table和create table的处理方法
    本文详细介绍了在Hive中执行drop table和create table命令时遇到无响应的情况,并提供了完整的解决方案。通过调整MySQL字符集编码,确保Hive数据库与MySQL之间的兼容性,从而有效解决问题。 ... [详细]
  • 本文针对初学者在创建Android项目时遇到的R.java文件错误提供了解决方案,通过实际案例和详细的日志分析,帮助读者快速定位并解决问题。 ... [详细]
  • 本文介绍了如何使用Java代码在Android设备上检测特定应用程序是否已安装。通过创建一个Intent并利用PackageManager查询该Intent的可用性来实现这一功能。 ... [详细]
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • Servlet过滤器入门:实现与配置
    本文介绍如何在Java Web应用中实现和配置Servlet过滤器,通过实现`javax.servlet.Filter`接口来创建过滤器,并详细说明其在web.xml文件中的配置方法。 ... [详细]
  • 本文探讨了天才与疯子之间的微妙界限,介绍了如何利用巨人的工具提升自我,以及如何通过科学决策、数据洞察和智慧的尺度来指导我们的生活和工作。 ... [详细]
  • 深入理解小程序中的Picker组件
    Picker组件是一种从屏幕底部弹出的滚动选择器,支持多种选择模式,包括普通选择器、多列选择器、时间选择器、日期选择器和省市区选择器。本文将详细介绍Picker的各种属性及其应用场景。 ... [详细]
  • 在许多地理位置选择类的应用程序中,侧边栏是常见的用户界面元素,用于通过选择特定的字母快速定位和选择地点。本文将详细介绍如何在Android应用中创建一个具有波浪效果的自定义侧边栏,以提升用户体验。 ... [详细]
  • 深入解析Spring Boot自动配置机制
    本文旨在深入探讨Spring Boot的自动配置机制,特别是如何利用配置文件进行有效的设置。通过实例分析,如Http编码自动配置,我们将揭示配置项的具体作用及其背后的实现逻辑。 ... [详细]
  • 探讨在使用 Fast-Android-Networking 库时遇到的 addStringBody 方法无法正常工作的问题及其解决方案。 ... [详细]
  • 传送门A-Registration#include#definelllonglongusingnamespacestd;chars[15],t[15]; ... [详细]
  • 本题要求计算给定两个正整数a和b时,2的-a次方与2的-b次方之和,并将结果以最简分数形式表示。输入包括多组测试数据,每组数据包含两个在2到20范围内的整数。 ... [详细]
author-avatar
姚扰腾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有