Android画图最基本的三个对象(Color,Paint,Canvas)

三个类都存放在 android.graphics包下

1) Color :颜色对象,相当于现实生活中的 ‘调料’

2) Paint : 画笔对象,相当于现实生活中画图用的 ‘笔’————主要的还是对‘画笔’进行设置

3) Canvas : 画布对象,相当于现实生活中画图用的 ‘纸 或 布’

三者相结合,就能画出基本的图形

常用方法:

1)Color :颜色对象

1.可以通过 Color.颜色名,来获取颜色,应为是静态的,返回一个整数值

2.调用静态的 argb方法,可以调出个性的颜色

alpha 是设置透明度的;red 设置红色; green是设置绿色; blue设置蓝色,范围都是[0-255],0至255 颜色依次加深,

2)Paint : 画笔对象,常用方法

3)Canvas :画布对象 ,绘制常见图形的方法

在android中自定义图形

1)需要继承 View 这个类,所有的组件都是继承于这个类

2)并要实现一个带Context参数的构造函数,因为父类中,没有隐式无参的构造函数

3)需重写父类中的onDraw方法,一切的画图操作将在这进行

1.具体代码:自定义 MyView

  1. package com.shudu;
  2. import android.content.Context;
  3. import android.graphics.BitmapFactory;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.view.View;
  8. // 自定义 view,需要实现 一个显式的构造函数,重写 onDraw 方法,一切的操作都在该方法上进行
  9. public class MyView extends View {
  10. public MyView(Context context)
  11. {
  12. super(context);
  13. }
  14. /**
  15. * 要画图形,最起码要有三个对象:
  16. * 1.颜色对象 Color
  17. * 2.画笔对象 Paint
  18. * 3.画布对象 Canvas
  19. */
  20. @Override
  21. public void onDraw(Canvas canvas) {
  22. // TODO Auto-generated method stub
  23. Paint paint = new Paint();
  24. paint.setColor(Color.BLUE);
  25. //设置字体大小
  26. paint.setTextSize(100);
  27. //让画出的图形是空心的
  28. paint.setStyle(Paint.Style.STROKE);
  29. //设置画出的线的 粗细程度
  30. paint.setStrokeWidth(5);
  31. //画出一根线
  32. canvas.drawLine(0, 0, 200, 200, paint);
  33. //画矩形
  34. canvas.drawRect(200, 500, 300, 300, paint);
  35. //画圆
  36. canvas.drawCircle(200, 200, 100, paint);
  37. //画出字符串 drawText(String text, float x, float y, Paint paint)
  38. // y 是 基准线 ,不是 字符串的 底部
  39. canvas.drawText("apple", 60, 60, paint);
  40. canvas.drawLine(0, 60, 500, 60, paint);
  41. //绘制图片
  42. canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 150, 150, paint);
  43. super.onDraw(canvas);
  44. }
  45. }

注意:

画 字符串

//画出字符串 drawText(String text, float x, float y, Paint paint)    // y 是 基准线 ,不是 字符串的 底部,就像 英语本上 写的英文 有些超出了 那根水平线就是基准线

  canvas.drawText("apple", 60, 60, paint);   canvas.drawLine(0, 60, 500, 60, paint);

2.Activity类,在Activity中显示出来

  1. package com.shudu;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class Shudu01Activity extends Activity {
  5. /** Called when the activity is first created. */
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(new MyView(this));
  10. }
  11. }

具体效果:

Android画图最基本的三个对象(Color,Paint,Canvas)的更多相关文章

  1. Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  3. Android应用之《宋词三百首》(二)

    接上回,上回我们讲到MainActivity里面将所有的宋词标题和作者显示到界面的ListView中去,我们接下来的工作是通过点击ListView的Item跳转到ContentActivity里面去显 ...

  4. Android艺术开发探索第三章——View的事件体系(上)

    Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...

  5. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  6. Android画图系列(二)——自己定义View绘制基本图形

    这个系列主要是介绍下Android自己定义View和Android画图机制.自己能力有限.假设在介绍过程中有什么错误.欢迎指正 前言 在上一篇Android画图系列(一)--自己定义View基础中我们 ...

  7. 【Android开发VR实战】三.开发一个寻宝类VR游戏TreasureHunt

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53939303 本文出自[DylanAndroid的博客] [Android开发 ...

  8. Android 高级UI组件(三)

    一.popupWindow 1.AlertDialog和PopupWindow最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManage ...

  9. Android实现全屏的三种方式

    一.通过代码 requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏 getWindow().setFlags(WindowManager.Lay ...

随机推荐

  1. UVA11107 Life Forms --- 后缀数组

    UVA11107 Life Forms 题目描述: 求出出现在一半以上的字符串内的最长字符串. 数据范围: \(\sum len(string) <= 10^{5}\) 非常坑的题目. 思路非常 ...

  2. [CCC 2018] 平衡树

    题面在这里! 根据题目描述就可以直接模拟出一个暴力. 如果把前 n^(1/2) 的树的方案数先一遍 O(n^(3/4)) 暴力预处理出来(其实复杂度并到不了这个级别),然后把n带进来直接暴力算就行了. ...

  3. 2017-2018-1 JAVA实验站 冲刺 day02

    2017-2018-1 JAVA实验站 冲刺 day02 各个成员今日完成的任务 小组成员 今日工作 完成进度 张韵琪 写博客.进行工作总结 100% 齐力锋 找背景音乐.开始界面图片.按钮图片.按钮 ...

  4. hdu 4284 状态压缩dp

    题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间           道路的花费,问可不可以在 指定的 h 个城 ...

  5. SpringBoot 搭建简单聊天室

    SpringBoot 搭建简单聊天室(queue 点对点) 1.引用 SpringBoot 搭建 WebSocket 链接 https://www.cnblogs.com/yi1036943655/p ...

  6. 蓝屏代码详解(更新WIN7蓝屏代码)

    6位代码含意 0 0x0000 作业完成.  1 0x0001 不正确的函数.  2 0x0002 系统找不到指定的档案.  3 0x0003 系统找不到指定的路径.  4 0x0004 系统无法开启 ...

  7. Spring构造方法注入类型歧义

    在Spring框架中,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题. 问题 让我们来看看这个客户 bean 实例.它包含两个构造方法,均接受3个不同的数据类型参数. ...

  8. linux下的系统调用函数到内核函数的追踪

    http://blog.csdn.net/maochengtao/article/details/23598433

  9. Silverlight:《Pro Silverlight5》读书笔记 之 XAML

    XAML Properties and Events in XAML Simple Properties and Type Converters To bridge the gap between s ...

  10. ecside 列表排序问题

    ecside列表首先点击某一列排序,没有问题,再点第二列的时候没有起作用.原因是第二次排序的时候还包含着第一次排序的字段.所以排序始终是第一次的排序结果. 修改ecside.js 的ECSideUti ...