您的位置:华清远见教育科技集团 >> Android资料 >> Android Skia UI控件架构  
 
Android Skia UI控件架构
分享到:

Skia的UI控件的基类为SkNoncopyable,扩展类包括SkImageView、SkStaticView、SkAnimatorView、SkBorderView、SkButtonView、SkListView、SkProgressBarView、SkScrollbarView等UI控件视图。Skia的显示类型定义在SkDisplayType.h中。Skia引擎的UI控件架构如下图所示。


Skia引擎的UI控件架构

但就目前而言,Skia的UI控件并没被编译到当前的工程中,这里就只做一些简单的介绍。

SkView是屏幕管理的基类,支持视图的kVisible_Mask、kEnabled_Mask、kFocusable_Mask、kFlexH_Mask、kFlexV_Mask等标志位操作。对视图的大小、宽高、焦点等进行处理。其扩展类包括SkStaticTextView、SkBitmapView、SkWidgetView(已弃用)、SkSliderView(已弃用)、SkHasLabelView、SkPushButtonView、SkCheckBoxView、SkProgressView、SkTextView(已弃用)、SkListView、SkGridView、SkWindow等。

SkWidget为UI控件的基类,在SkView的基础上增加了对控件事件的处理能力,相关的扩展类包括SkHasLabelWidget、SkButtonWidget、SkPushButtonWidget、SkCheckBoxWidget等。

Skia的事件处理是通过SkEventSink、SkEvent等来进行的,其中SkEvent是Skia事件的携带者,SkEventSink是Skia事件的接收者。Skia通过一个32位的UUID即SkEventSinkID来标识SkEventSink对象,当有Skia事件被推送时,Skia会根据SkEvent对象携带的SkEventSinkID值将Skia事件分发给对应的SkEventSink。Skia事件的数据被封装在SkMetaData中。

Skia根据SkEventSinkID来查询相关的SkEventSink的过程如下:

代码:SkEventSink::FindSink()的实现

SkEventSink* SkEventSink::FindSink(SkEventSinkID sinkID)
    {
    if (sinkID==0)
        return 0;
    SkEventSink_Globals& globals=*(SkEventSink_Globals*)SkGlobals::Find(SK_EventSink_GlobalsTag, create_globals);
    SkAutoMutexAcquire ac(globals.fSinkMutex);
    SkEventSink* sink=globals.fSinkHead;
    while (sink)
      {
        if (sink->getSinkID()==sinkID)
          return sink;
        sink=sink->fNextSink;
      }
    return NULL;
    }

Skia事件的处理在SkEventSink::DoEvent()中进行。

 更多相关文章

·Android Skia图形渲染
·Android Skia 渲染概述
·Android Surface渲染管理
·Android LayerBuffer模式的layer渲染
·Android应用程序之WebApp开发实战