1,GDI介绍

2,UI绘制流程

3.自定义控件的实现

GDi(Graphics Device interface)及时图形设备接口,它的主要任务是用来系统与绘图程序之间的信息交互

Android的GDI在上层为Gui提供一个抽象的概念,GDI输出抽象成了文本,画笔,位图操作等设备无关的操作,让应用程序只需要面向逻辑的设备的上下文进行输出操作,而不要涉及设备的输出设备,以及输出边界的管理,GDI负责将文本,线条位图概念对象映射到具体的物理设备.

2.UI绘制流程

Android系统中,View指的是widget,也可以称为控件,View可以分为三种,基本的View,容器View,布局View

典型的View 如:ImageView TextView

容器类的View 如:ListView ,GridView ViewGroup

布局类的View 如:FrameLayout GridView LineaLayout

1.AndroidActivityManagerService 创建Activity线程,激活一个Activity

2.系统调用Instrumentation.newActivtity创建一个线程

3.Activity创建后,关联一个新创建的phonewindow中,这样Activity获取唯一 的一个WindowManager服务的实例,该实例就是ActivityView的实例

4.Activity创建的过程中使用setContentView来设置用户UI,这些View 被加入到PhoneWindow的ContentParent中

5.Activity线程线程继续执行,当执行Activity.makeVisible是将根view DecoView加入到WindowsManager中,windowsManger会为每个DecoView创建对应的ViewRoot .

6.每个ViewRoot拥有一个Surface,每个Surface将会调用底层库创建图形绘制的内存空间,这个底层库就是SurfaceFlingger,Surface将会负责将整个View整合到一块儿(按照Z轴现实到屏幕)

7.如果用户直接在Canvas上绘制,实际上它直接操作Surface,但对每个View的变更,它要通知到ViewRoot,然后ViewRoot获取Canvas,如果绘制成功则会通知SurfaceFlinger,合并Surface到Surface设备屏幕

自定义控件的实现

1,继承已有的控件,实现控件的自定义

主要是实现一个控件和已有控件在很多方面的比较类似,通过对控件的拓展就可以满足需求

2.通过继承一个布局来实现控件的自定义

般来说做组合控件的时候可以通过这个方式来实现

3.通过继承View类来实现控件的自定义

无法通过上述的两种方式来实现的时候可以考虑这个 方法

详细讲解下通过继承一个布局来实现控件的自定义

如果需要在XML文件里面与控件的属性进行绑定,这个时候要在values/attrs.xml 文件里面对控件的属性进行声明

<declare-styleable name=“progress”> //控件名字
<attr name=“text”format=“string”/> //属性名和类型
<attr name="titleSize"format="dimension"/>
</declare-styleable>

声明后就可以再其的构造方法里面对其进行加载,此时,加载XML属性:

TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.progress); //
加载属性集
attr.getString(R.styleable.progress_text) //这个地方是对特定的属性的读取。

在读取完成之后可以对其进行使用

另外在应用的时候要注意命名空间的问题

<com.eoe.control.view.progressBar
xmlns:progress="http://schemas.android.com/apk/res/com.eoe.control"
android:id="@+id/my_progressBar"
android:layout_width="fill_parent" android:layout_height="wrap_content"
progress:text="我是自定义的" progress:titleSize="30sp">
</com.eoe.control.view.progressBar>



更多相关文章

  1. Android用户界面 UI组件--TextView及其子类(二) Button,selector
  2. ADB 连接不上 Android 设备
  3. ADB通过WIFI连接Android设备
  4. Android开发之Android自带的下拉刷新控件SwipeRefreshLayout
  5. 获取Android设备常规参数信息(SN,IMEI)及定制信息
  6. Android 蓝牙通信开发(一) 搜索蓝牙设备
  7. Android 应用程序查找设备的方法——以串口为例
  8. Android--自定义视图控件(一)(Android Studio)
  9. Android自定义控件的使用

随机推荐

  1. ActivityThread的main方法究竟做了什么?
  2. Android属性动画之第一重修炼总结
  3. Android亮屏和熄屏控制
  4. 短信的收发及在android模拟器之间实践(一)
  5. Android(安卓)9 (P) Zygote进程启动源码
  6. 高手帮你学规范!iOS和Android规范解析之提
  7. Google 停止支持 CDMA 设备
  8. Android入门之Style与Theme用法实例解析
  9. 彻底解决android读取中文txt,lrc的乱码(自
  10. Rect、RectF矩形类