Evas, Smart Objects and Edje 之间的关系(图示)

http://blog.gustavobarbieri.com.br/2008/05/13/evas-smart-objects-and-edje/

 

 

 

具体的解释,我后面翻译一下:

 

 

2011.05.11, 补充翻译原文:

 

Evas仅仅显示一些对象:比如固定颜色的长方形,梯度长方形,图片,文本,文本块,多边形,直线,以及smart object.

Smart object是一种特殊的类型,因为它是“可扩展的”,并且开发人员需要自己实现smart object的虚函数(virtual method), 这些虚函数可以实现类似普通object的行为,比如evas_object_color_set()或者evas_object_resize()那样的行为。Smart object本身并不会被显示出来,smart object是容器(container, 它可以包含其他的对象,比如images 或者rectangles, 这就是为什么上图中,用一个box来表示smart object。打个比喻:好像Smart objectchildren objects被放在一个特殊的layer中进行处理:smart object容器外面的object是不能和smart object容器里面的object打交道的。 推荐一种好的处理方法:不要把smart objectchildren object暴露给外面,而是由smart object提供一组虚函数来操作这些children objects.

程序员普遍会犯的一个错误:仅仅用smart object提供的函数创建了Objects,但是却忘记把这些objects指定为这个smart objectchildren.

你必须给一个child指定一个parent, 用这个函数:evas_object_smart_member_add(child, parent)。当然了,你也可以解除他们的父子关系:evas_object_smart_member_del(child)

由于children不能有超过一个parent, 因此,在你给一个child重新指定parent前,要把它的当前parent先抹掉;

Edje是一个smart object. 这个特殊的smart object可以从edje文件中加载一组parts. Edje文件里面定义了一系列的group, 每个group是由一组parts组成。 Parts就是evas objects.

每个part有不同的状态。

当一个group被指定给一个edje object时:edje_object_file_set(object, file_name, group_name), 这个group中的parts就会按照顺序被创建。什么样的顺序呢?(first will go first, thus will stay at bottom)。这些新创建的evas object的状态一般是: “default” 0.0 。如果有的part (evas object)还有相对坐标 (相对于当前edje object的几何尺寸),那么,当edje object被改变时,这个edje object的所有附属的parts都给被重新计算,并且给他们设置几何尺寸。如果有的part的坐标是相对于其他parts的,则,当这些parts发生改变是,他们附属的part也会被重新计算。

程序员可以通过修改parts的状态来操作edje,也就是通过程序来完成。程序是基于signal来实现。Edje会分发一些signal,比如“resize”, “mouse, move”, 和“show”。我们推荐程序自己创建新的信号,这些信号可以用函数: edje_object_signal_emit(object, “signal”, “source”), 来发射出去。

使用edje常犯的错误就是touch它的children objects. 尽量不要用函数改变一个object,而这个object是你用函数edje_object_part_object_get()刚得到的,这个函数仅仅是查看的目的。

允许这样来修改edje:从你的重新代码里面发射signal, 然后edj中有代码段会捕捉到你发射的signal, 并且出发某些parts的状态改变。

让我们牢记:没有不变的smart objectchildren object, 这是edje严格遵守的一条原则。如果你没有遵守这个规则,会发生什么样的情况呢?

下面这一段比较晦涩点,留着原文。Let’s remember that it’s recommended to never changed smart object children, Edje is strict, making this a rule. What can you expect if you break this rule? Before, I said that Edje would recalculate dependent parts when the dependency changes, but I lied: for simplicity purposes, when something change, Edje recalculates the whole thing, and it does so using the state information from EDJ, not the current value of the object. If you change the color of some rectangle from white to black, recalculation will enforce the rectangle to be white. Same for images, if you set the image file to be something else, it will be restored to the image specified in the EDJ.

 

SWALLOW parts也是比较特殊的。这些SWALLOW parts可以允许程序员把externalobject加入edje对象:edje_object_part_swallow(object, “part_name”, external_object); 然后由edje来管理这些external object.

Edje来管理这个external object, 也就是说,edje会成为这个external objectparent, edje会给这个external object设置clippers, colors, visibilitygeometry. 当调用edje_object_part_swallow(object, “part_name”, external_object)之后,程序员就不再拥有这个object了,程序员这时候就只能允许修改external object的其它东西了,而不能管理external objectproperties了,比如:由于SWALLOW没有任何image property, 所以程序可以另外给这个已经被swallowedexternal object单独设置image.

理解上面这些概念是非常重要的,真正的程序是由smart object, edje混合而成的,一个包含在另外一个里面,如果对于这些关系不清楚的话,会导致很大的混乱。

上面画的图,能够很好的体现evas, smart object, edje之间的关系,从而避免一些混乱。程序员管理smart object以及background. 为了改变edje, 他需要调用smart object里面定义的一些APIs. 如果要修改”start” image, 需要调用edjeAPIs.

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值