想要了解android自定义View,去设计和实现自己想要的View,这里从最基础的知识透析安卓自定义控件实现机理。
首先我们来了解下做自定义View,必须知道的基础知识:
android.graphics包是核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理。这个包中提供了很多类。
1
、
Canvas--
画板
Canvas是一个大大的画板,这个画板有多大,所有的View及实现的图形都在这个Canvas上实现。
2
、
Paint--
画笔
有画板没有画笔怎么能行了,没错Paint就是画笔。掌管Android王国中的所有画笔。
3
、
Color--
颜色
Color.parseColor(String str);函
数这个函数太强大了,解析Alpha颜色和普通的颜色。
颜色被表示为封装的数值,这个数值由四个字节组成,分别是:alpha、red、green、blue,这些值是非自左乘的,也就是说任何透明性只存储在alpha部分,而不是在颜色组成部分。每一部分按照如下的顺序保存:(alpha<<24)|(red<<16)|<green<<8)|blue.每一部分的取值范围在0-255之间,0意味着这部分不起作用,255表示100%的起作用。因此不透明的黑色应该是0xFF000000,不透明的白色应该是0xFFFFFFFF 。
4
、
Bitmap--
位图
这个类可以掌管天下的png和jpg图片。我们会使用三种方法获得Drawable文件夹下的图片
5
、
Typeface类android.graphics.Typeface
6、Path类android.graphics.Path
7、RectF类android.graphics.RectF和Rect类android.graphics.Rect
1,继承View
- public class MyView extends View {
2,重写父类View的一些方法,例如onDraw;
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- /**
- * 画最外层的大圆环
- */
- int centre = getWidth()/2; //获取圆心的x坐标
- int radius = (int) (centre - roundWidth/2); //圆环的半径
- paint.setColor(roundColor); //设置圆环的颜色
- paint.setStyle(Paint.Style.STROKE); //设置空心
- paint.setStrokeWidth(roundWidth); //设置圆环的宽度
- paint.setAntiAlias(true); //消除锯齿
- canvas.drawCircle(centre, centre, radius, paint); //画出圆环
- Log.e("log", centre + "");
- }
3,根据onDraw需要到的属性,可以自定义View属性(values下建立attrs.xml文件);
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="RoundProgressBar">
<attr name="roundColor" format="color"/>
<attr name="roundProgressColor" format="color"/>
<attr name="roundWidth" format="dimension"></attr>
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
<attr name="max" format="integer"></attr>
<attr name="textIsDisplayable" format="boolean"></attr>
<attr name="style">
<enum name="STROKE" value="0"></enum>
<enum name="FILL" value="1"></enum>
</attr>
</declare-styleable>
</resources>
4,布局中或是代码中应用自定义View,如:
<net.changxing.test.MyView
android:id="@+id/roundProgressBar2"
android:layout_width="80dip"
android:layout_height="80dip"
android:layout_alignLeft="@+id/roundProgressBar1"
android:layout_alignParentBottom="true"
android:layout_marginBottom="78dp"
app:roundColor="#D1D1D1"
/>
5、在activity中实例化,修改相应属性成功现实出设计的自定义View;