最近一直忙适配方面的工作,还有的奇葩的事就是不同机型对于显示的时候颜色有时会变其它颜色,所以干脆不在布局直接添加自定义的,而是直接在网上找了篇直接绘图的,shape圆形,自己的需求是判断文章未读时显示小红点,读过的则消失。

网上找的这篇shape圆的博客不错,好久没接触过了,所以一时也没回想得起来做,所以网上找到了这篇,直接用直接上手。

Android绘图主要涉及到android.graphics.* 包里面一些类:

  • Canvas
  • Bitmap及其相关的类
  • Xfermode及其子类
  • Paint及其相关类和内部类
  • Shader及其子类
  • Rect,Color,Point,Path等基础类

实现:

shape可以绘制矩形环形以及椭圆,所以只需要用椭圆即可,在使用的时候将控件比如imageview或textview的高宽设置成一样就是正圆,solid表示远的填充色,stroke则代表远的边框线,所以两者结合可以实现带边缘的圆,当然也可以直接加上size控制高宽,下面的代码实现效果是一个带白边的红圆。

<?xml version="1.0" encoding="utf-8"?>

<shape

xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="oval"

android:useLevel="false">

<solidandroid:color="@color/red"/>

<stroke

android:width="1dp"

android:color="@color/white"/>

<sizeandroid:width="20dp"

android:height="20dp"/>

</shape>

UI控件不满足我们的需求的时候,就需要自定义View。自定义view的一个重点就是实现就是去重写他的绘制过程,也就是View.onDraw(Canvas canvas)方法,它里面就是绘制图形的过程了,比如说一个Button,绘制按钮和按钮上的文字都是在它自己的onDraw方法中完成的。如果你想给ImageView加个蒙版,可以继承ImageView并且重写他的onDraw方法,调用完父类的onDraw之后,再自己Canvas来画一个黑色的半透明矩形,这样就可以对现有的控件进行加工了。

Canvas是画布,你绘制东西的时候就是绘到了这个画布上,给用户显示的东西也是这个画布上的东西。通常来说,当你调用到onDraw方法的时候对应的View已经确定了他的宽度和高度(关于View的measure和layout过程以后再详述)。那么在Canvas上,你画的范围就只有View对应的大小了。我们用代码来描述下:

1 protected void onDraw(Canvas canvas) {
2     super.onDraw(canvas);
3     int verticalCenter    =  getHeight() / 2;
4     int horizontalCenter  =  getWidth() / 2;
5     int circleRadius      = 200;
6     Paint paint = new Paint();
7     paint.setAntiAlias(false);
8     paint.setColor(Color.RED);
9     canvas.drawCircle( horizontalCenter, verticalCenter-250, circleRadius, paint);
10  
11     paint.setAntiAlias(true);
12     paint.setStyle(Paint.Style.STROKE);
13     paint.setStrokeWidth(20);
14     canvas.drawCircle( horizontalCenter, verticalCenter+250, circleRadius, paint);
15 }

这个View的大小可以通过getHeight()和getWidth()来获得。我们准备画两个圆圈,半径都是200。我们主要用到的方法是drawCircle()方法,参数的意义分别是圆心的x,y坐标,半径和所使用的画笔Paint。

Paint是画笔,Canvas是画布,画笔控制了所画东西的颜色大小字体等等。在画第一个圆的时候,我们通过Paint.setAntiAlias方法设置抗锯齿属性为false,并设置颜色为红色。

在画第二个圆的时候,我们打开了抗锯齿。将Paint的风格设为STROKE,也就是只画边框。然后设置边框宽度为20.

你可以将上面的代码运行一下(Demo的github地址:https://github.com/fookwood/AndroidGraphicsDemo)

所画出来的东西是符合我们预期的。上面的圆是实心,下面的是空心,而且上面的圆边缘会有锯齿感,而下面的没有。在用Canvas绘制一些矢量图形的时候,比如矩形,圆形,文字的时候我们通常会通过Paint打开抗锯齿。

以上为网上找的博客,下边的为自己项目修改的:

1、设置小圆点
<?xml version="1.0"encoding="utf-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"android:useLevel="false"><solidandroid:color="@color/red"/><sizeandroid:width="7dp"android:height="7dp"/>
</shape>

布局调用:<TextViewandroid:id="@+id/iv_read"android:layout_width="7dp"android:layout_height="7dp"android:adjustViewBounds="true"android:scaleType="fitXY"android:layout_marginRight="3dp"android:layout_marginTop="5dp" android:background="@drawable/diary_red_dot" //调用方可/>

Android 绘图和shape圆形相关推荐

  1. Android - shape圆形画法(oval)

    shape圆形画法(oval) 本文地址: http://blog.csdn.net/caroline_wendy 1. 创建一个目录drawable, 用于存放xml类型的图片资源; 2. 在dra ...

  2. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  3. android 绘画,Android绘图基础

    绘图三要素 一支画笔 Paint. 一张画布 Canvas. 一个 Bitmap 或者一个 View 来承载这个图形. Paint常用属性 setAntiAlias() 设置画笔锯齿效果. setCo ...

  4. android 自定义圆形pop,Android布局自定义Shap圆形ImageView可以单独设置背景与图片...

    一.图片预览: 一.实现功能: 需求要实现布局中为圆形图片,图片背景与图标分开且合并到一个ImageView. 二.具体实现: XML中布局中定义ImageView,关健设置两个参数 Android: ...

  5. Android中使用shape自定义纯色图片总结

    android中通过自定义xml实现你需要的shape效果 xml属性配置, 在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来解决.不过这种方式可能需要多个图片,比如 ...

  6. android绘图之Paint(1)

    Android 绘图学习 android绘图之Paint(1) android绘图之Canvas基础(2) Android绘图之Path(3) Android绘图之drawText绘制文本相关(4) ...

  7. Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...

  8. Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

    Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...

  9. Android绘图(四)阴影、渐变和位图运算处理

    目录 一.阴影 1.1 案例-为文字添加阴影和发光效果 二. 渐变 2.1 线性渐变(LinearGradient) 2.1.1 案例- 实现圆角矩形环形渐变 2.2 径向渐变(RadialGradi ...

最新文章

  1. 【计算理论】计算复杂性 ( 证明团问题是 NP 完全问题 )
  2. 计算机高校应用现状的参考文献,【计算机应用论文】高校计算机实验室管理思考探索(共4094字)...
  3. 设计模式(一)简单工厂(创建型)(JavaPHP)
  4. 为什么招聘单片机工程师的时候要求精通C/C++?
  5. php phpmailer qq邮箱,QQ邮箱利用PHPmailer发送邮件
  6. Matlab各种拟合
  7. c oracle实体模型,ADO.NET实体数据模型详细介绍
  8. php在線評論,php在線生成pdf筆記 | 學步園
  9. nginx下虚拟目录配置301域名重定向
  10. 用英语描述计算机操作,操作系统的英文介绍
  11. memcpy和strcpy函数
  12. 面试妥了!2020 爬虫面试题目合集
  13. 使用更安全的C字符串操纵
  14. jPList – 实现灵活排序和分页功能的 jQuery 插件
  15. C语言动态链表数据结构实现的学生信息项目
  16. PHP实现留言板功能
  17. The Fifty-eighth Of Word-Day
  18. 【避免进程死锁】银行家算法
  19. 快速可靠网络传输协议 KCP
  20. 40个笑到抽筋的神回复,绝了!

热门文章

  1. 埃隆马斯克又开始卖板砖了?
  2. 面对行业分析家和敏捷专家都认可的API测试,我们为什么会望而却步?
  3. 企业微信如何养号,什么情况下可能被封号?
  4. Labview之子面板的使用
  5. PyCharm中的符号学习
  6. Linux文件结构和Ubunto常见命令
  7. 在线markdown源码php,在线 MarkDown 编辑器 - Online MarkDown Editor - 孟坤工具箱
  8. 孟坤个人导航动画页面源码
  9. python-docx保留格式替换其中的文字
  10. NC移动审批2.0版本介绍