gpt4 book ai didi

Android GUI架构——Surface/view/window/canvas之间的关系

转载 作者:IT老高 更新时间:2023-10-28 21:49:31 53 4
gpt4 key购买 nike

===========================

更新:经过几天的谷歌搜索和experiments ,我已经找到了大多数这些愚蠢问题的答案。查看我提交的答案。

=========

Android Window 的职责是什么?

这里有几个问题:

  • 它是否负责收集和分派(dispatch)输入?
  • View 和窗口是什么关系?和DFB中的surface和window的关系一样吗?
  • Activity 和窗口之间是什么关系?每个 Activity 都会有一个窗口吗?
  • 是否可以从应用程序创建一个窗口?什么时候有必要?
  • Android 是否支持多窗口?

编辑:添加更多问题:

  1. Window、View、Canvas、Surface等各个类的职责是什么?它们之间是如何协作的?

  2. 一个Activity通常有多少个窗口?

3. 一个Activity中的所有 View 会附加到Window吗?附加是什么意思?

  1. 每个 window 都有表面吗?每个 Canvas 都有表面?

  2. View负责focus/keyEvent/manager,而Cavus只负责“绘图”操作。

  3. WindowManager 负责窗口堆叠?这与 SurfaceFlinger 有什么关系?

  4. View 不拥有 Surface , View 包含的 Window 拥有?

  5. View 使用通过调用 surface.lockCanvas() 获得的 Canvas 绘制自身。

  6. 什么时候会调用 onDraw(Canvas)?如何以及由谁传递 Canvas 参数?

  7. Canvas 有尺寸吗? Window 的表面会一直全屏吗?

再次编辑:

看完 Romain Guy 提供的精彩演示后 http://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL ,几个问题解决了,再补充几个:)

  1. 每个 Activity 是否都有一个 ViewRoot 和一个 Window?
  2. 是否需要显式创建一个窗口?以及窗口的表面是否总是全屏?
  3. 状态栏会在另一个窗口中吗?
  4. 表面的尺寸是多少?会一直全屏吗?

最佳答案

Is Window responsible for collecting and dispatching the input?

没有。 ViewRoot 对此负责。

What is the relationship between the view and window? Same as the relationship between surface and window in DFB?

?

What is the relationship between an activity and window? Will each activity have a window?

是的,大多数时候。但是,SurfaceView 有自己的窗口。所以,如果一个 Activity 有一个 SurfaceView,它就会有多个 Window。

Is it possible to create a window from application? And when it is necessary?

没有必要。

Does Android support multi-window?

当然。使用 HierachyView 可以清楚地看到系统中存在多个 Window。

1.What are the responsibilities of various classes, such as Window, View, Canvas, Surface, and how do they collaborate with each other? 2.How many windows usually an Activity have?

通常是一个。

3.Will all the views in one Activity will be attached to a window? What does attach mean? 4.Does every window have a surface? Does every canvas have a surface?

每个窗口都有一个表面,Surface 使用 Canvas 在表面上绘制。

5.View is responsible for managing focus/key events, while Canvas is only responsible for "drawing" operation?

是的。

6.WindowManager is responsible for Window stacking? How does that relate to SurfaceFlinger?

不确定 WindowManager 的责任。 (待办事项)

SurfaceFlinger用于组成与不同Window/Activity关联的Surface。

7.View doesn't own a Surface, the Window the view contained owns?

View 将使用 Canvas 在表面上绘制。 View 附加到的窗口拥有该表面。

这可以通过实现自定义 View 来理解,此时您应该重写派生类中的 onDraw(Canvas) 方法。

8.The View draws itself using canvas got by calling surface.lockCanvas()?

是的。

9.When and how is onDraw(Canvas) called, and who passes the canvas parameters?

onDraw() 将由 RootView 调用,并在调用 invalidate 时调用。 canvas 参数是从 RootView 传递过来的。

10.Does Canvas have a size? Will a Window's surface always be full screen?

我不能肯定地说。但是当我创建一个自定义 View 时,从 onDraw(Canvas) 获得的 Canvas 的大小是全屏的。

但是,据我了解,出于性能考虑,窗口的 Surface 不应始终全屏。但这一假设尚未得到验证。例如,statusBar 窗口不应该是全屏的。

1.Will every Activity have one ViewRoot and thus one Window?

是的。

2.Is there any need to create a window explicitly? Will the surface for the window always be full screen?

本身无需显式创建窗口。

3.Will status bar be in another Window?

是的。

4.What is the size of the surface? Will that always be full screen?

关于Android GUI架构——Surface/view/window/canvas之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776115/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com