最近一直忙适配方面的工作,还有的奇葩的事就是不同机型对于显示的时候颜色有时会变其它颜色,所以干脆不在布局直接添加自定义的,而是直接在网上找了篇直接绘图的,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>
布局调用: <TextView android: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" //调用方可 />
原文链接:https://blog.csdn.net/llixiangjian/article/details/53235048
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~