900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android模仿淘宝详情页界面

Android模仿淘宝详情页界面

时间:2022-05-16 04:37:15

相关推荐

Android模仿淘宝详情页界面

话不多说—先上效果图:

图1中主要需要实现的效果:

1.轮播图

2.顶部导航栏的渐变

3.顶部导航栏随着滑动的位置选择对应的值以及点击滑动到对应位置

Android模仿淘宝详情页界面文件:/f/25127180-734377737-78795d?p=551685 (访问密码: 551685)

FreeMarker 是一个模板引擎(更通俗的说法其实就是链接文本的生成器),它集成在 MCUXpresso IDE 内部,由 MCUXpresso IDE 自动调用。MCUXpresso IDE 下最终的链接文件其实是由这个 FreeMarker 处理生成的。在 MCUXpresso IDE 软件内部有一组默认的系统模板(也叫根模板),它还支持用户提供的模板(这些模板均是用一种专用的语法 FTL 来描述的),所有适用工程的模板最终统一经过 FreeMarker 来处理。

模板的设计是组件化的,这意味着用户不需要编写整个工程的模板,只需要加入指定的用户模板实现个性化链接需求即可,其它部分仍由 MCUXpresso IDE 图形配置界面完成。默认情况下,用户模板需要被放在指定的 user_project_root/linkscripts 目录下(这个路径不用额外添加进工程选项 C/C++ General \ Paths and Symbols \ Source Location 中)。

Note:更多 FreeMarker 细节,可以参见 \MCUXpressoIDE_11.6.0_8187\MCUXpresso_IDE_User_Guide.pdf 文档里的 17.14 FreeMarker Linker Script Templates 小节。

三、新方法解决问题

现在我们尝试用 FreeMarker 特性来解决 critical_code.o 的链接需求。首先是在 \MCUXpressoIDE_11.6.0_81874\workspace\evkmimxrt1170_hello_world_demo_cm7 下创建一个名为 linkscripts 的文件夹(前面说了,这个新文件夹路径不需要在工程选项里登记),然后在 linkscripts 里面新建如下三个 .ldt 文件(固定文件名,由 FreeMarker 定死的):

bss.ldt

data.ldt – 作用是将 critical_code.o 放到指定 RAMx 区域

– 备注:如果 MCU 仅一块 RAM 空间,则此处应为 main_data.ldt

main_text.ldt – 作用是将 critical_code.o 从 .text 段(默认链接在 Flash 区域)移出来

main_text.ldt 内容比较简单,仅仅是用于告诉 FreeMarker 不要将 critical_code.o 里的 text 段放进主 .text 段里一起处理:

// 单目标文件写法

*(EXCLUDE_FILE(critical_code.o) .text)

// 如果是多目标文件,写法可以这样

*(EXCLUDE_FILE(*critical_code1.ocritical_code2.o) .text)

data.ldt 中内容比较关键,用于重置 critical_code.o 里的 text 段。这里需要注意的是如果是将该 text 放置进主 RAM 区域(即工程选项 MCU settings 里 Alias 名为 RAM 的空间),其写法跟不放进主 RAM 不一样:

// 如果目标文件放进主 RAM - 正确写法,等效于放进 memory.alias==“RAM” 或者 memory.name==“SRAM_DTC_cm7” 区域

critical_code.o(.text)

// 如果目标文件放进主 RAM - 错误写法,实际不生效,等于没有重置,代码依旧放进 Flash 区域

<#if memory.alias==“RAM”>

critical_code.o(.text)

</#if>

// 如果目标文件不是放进主 RAM - 正确写法1

<#if memory.name==“SRAM_ITC_cm7”>

critical_code.o(.text)

</#if>

// 如果目标文件不是放进主 RAM - 正确写法2

<#if memory.alias==“RAM2”>

critical_code.o(.text)

</#if>

// 如果是多目标文件,写法可以这样

<#if memory.name==“SRAM_ITC_cm7”>

critical_code1.o(.text)

critical_code2.o(.text)

</#if>

现在编译工程查看映射文件,我们会发现 critical_code.c 里全部函数都已经链接在指定的 RAMx 区域了。如果你想更进一步,把 critical_code.c 里全部 RO data 段都放进指定 RAMx 区域,则需要再在 linkscripts 文件夹里增加一个名为 main_rodata.ldt 文件。其内容如下,这里是告诉 FreeMarker 不要将 critical_code.o 里的 RO data 段放进主 RO data 段里一起处理。

*(EXCLUDE_FILE(*critical_code.o) .rodata)

*(EXCLUDE_FILE(critical_code.o) .rodata.)

*(EXCLUDE_FILE(*critical_code.o) .constdata)

*(EXCLUDE_FILE(critical_code.o) .constdata.)

. = ALIGN(${text_align});

然后 data.ldt 里改成如下这样就可以了:

<#if memory.alias==“RAM2”>

critical_code.o(.text)

critical_code.o(.rodata .rodata..constdata .constdata.*)

</#if>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。