Material Design-Surface平面第二篇

本文介绍如何在Android应用中运用Material Design动效提升用户体验,包括实现循环视图动画及响应滚动事件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点

  1. 使用动效,完成循环视图,响应点击新条目的过渡
  2. 在平面间,根据滚动相应的平面,使它们之间产生动态效果

参考资料

udacity-在 Android 应用中使用材料设计

概述


继续上一篇 Material Design-Surface平面第一篇

Material Design 中材料属性(动效的使用)能够帮助我们创建沉浸式的应用程序,赋予材料平面生命的独特属性。用来响应交互操作,而非跳转到新的状态。这使得它们更容易被人理解。

循环视图(circular review)


它是一个简单、有意义的动效。

使用场景:点击 RecyclerView 的其中一个条目,将开启循环视图向新条目文本过渡。

如何实现循环显示效果?

将要进行操作的视图,中心点 XY 用来执行过渡动画,还有 startRadius 动画开始半径和 endRadius 动画结束半径。

循环显示

这是个视图组,包含了我们将要更改的文本。首先,我们需要找到显示效果的中心点,我们可以采用条目的半宽和半高。显示效果应该是从无到有,所以我们的起始半径为 0,结束半径可以是半宽高的斜边大小。

 boolean isVeggie = ((ColorDrawable)view.getBackground()) != null && ((ColorDrawable)view.getBackground()).getColor() == green;

            int finalRadius = (int)Math.hypot(view.getWidth()/2, view.getHeight()/2);

            if (isVeggie) {
                text1.setText(baconTitle);
                text2.setText(baconText);
                view.setBackgroundColor(white);
            } else {
                // 动效
                Animator anim = ViewAnimationUtils.createCircularReveal(view, (int) view.getWidth()/2, (int) view.getHeight()/2, 0, finalRadius);
                text1.setText(veggieTitle);
                text2.setText(veggieText);
                view.setBackgroundColor(green);
                anim.start();
            }

响应滚动事件


就像材料可以改变宽度和高度,它们也可以改变平面高度。我们看到,当手指触碰到按钮时,这些按钮像是被磁铁吸引而悬浮起来一样,而这一效果也可以发生在滚动交互上。

想象两个平面,它们在相同的水平面上,共同移动且步调一致。在特定的一个点上,我们的平面可能需要固定住并向上抬升,使得另一个平面可以从下方通过。我们称之为“缝到阶过渡”(a seam to step transition)。两个相邻的平面先是形成一条缝,当较低位置的平面从另一个平面下方滑过的时候,它们形成了一个阶梯。

例如,使用经过扩展的应用栏,在用户滚动时,应用栏缩小自身的标准高度,并将其固定在屏幕上方,在用户滚动时,应用栏缩小了自身的标准高度,并将其固定在屏幕上方。

滑动事件效果

我们可以通过新的应用栏布局和收缩的工具栏布局,构建这一效果。

这里写图片描述

CoordinatorLayout 是一个 FrameLayout, 该控件帮助协调视图之间的行为,在这个例子中,他将协调列表滚动和应用栏滚动两个行为。

AppBarLayout:是一个竖直方向(vertical)布局的 LinearLayout,实现了 Material Design 应用栏的许多功能,也可以说是滚动手势。该容器的子 View 应该通过 app:layout_scrollFlags 属性,规定它们的滚动行为。它必须是 CoordinatorLayout 的直接子 View,如果它的父类容器是其它 ViewGroup,它的大多数功能将不会起作用。

AppBarLayout 也需要一个单独的可滑动的成员,为了知道什么时候滚动。这个约束条件通过设置 app:layout_behavior="@string/appbar_scrolling_view_behavior" 属性来完成。

CollapsingToolbarLayout 包裹 Toolbar 的直接父类容器,实现应用栏的折叠效果。当应用栏展开或收缩时,通过 app:collapsedTitleTextAppearanceapp:expandedTitleTextAppearance 属性来设置标题样式。app:contentScrim="?attr/colorPrimary" 属性用来设置收缩后的应用栏背景样式。

通过使用这些技术,我们可以将 UI 划分成,传递关系的多个平面,也可以提供交互操作的暗示。界面应该动态响应用户的交互操作。当我们视图表达 UI 元素之间的关系的时候,使用这些技术,容易被人理解,又能使应用更加直观。

制作可滚动的动态平面


大多数的逻辑代码都在布局文件中。

这里写图片描述

当我们向上滚动时,图片消失。这个图片有趣的是,在应用栏进行收缩的时候有一种视差效果。“不对称滚动”,也就是前景比背景移动更快,使用户有一种深度感。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_height="168dp"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimaryDark"
            app:title="@string/action_settings"
            app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
            app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="parallax"
                android:scaleType="centerCrop"
                android:src="@drawable/eclairs"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:contentInsetStart="72dp"
                app:theme="@style/AppTheme.PopupOverlay"
                 />
        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.design.widget.CoordinatorLayout>

AppBarLayout 希望 CoordinatorLayout 中有一个支持嵌套滚动的同级控件。我们可以通过 NestedScrollView 或设置 ScrollViewandroid:nestedScrollingEnabled 属性为 true 或其它可滚动控件(如 RecyclerView)。设备滚动视图中,嵌套滚动和 CoordinatorLayout 协同工作。在应用栏滚动、嵌套视图滚动、两者同时滚动或两者均不滚动的时,发出通知并进行管理。

<think>好的,用户之前已经询问过如何在HFSS 2024 R1中仿真无反射波导腔体滤波器,我给出了详细的步骤,但现在用户反馈说“不够详细,缺少该点击哪个选项设置,请在详细一点”。这意味着用户可能在操作过程中遇到了具体界面或选项位置不明确的问题,导致无法顺利执行步骤。需要更细致的指导,特别是界面操作路径和参数设置的具体位置。 首先,我需要回顾之前的回答,确认哪些步骤可能不够具体。例如,在建模部分提到“通过Draw→Box创建矩形波导”,但可能没有详细说明如何在HFSS的界面中找到Draw菜单,或者如何设置Box的参数。用户可能需要每个步骤的截图式指引,但由于文本回复的限制,只能用文字详细描述每个菜单的层级和选项名称。 接下来,用户提到的“设置PML边界”可能涉及到边界条件的具体配置步骤,而之前的回答可能没有详细说明如何在HFSS中添加和设置PML。此外,材料定义中的“表面涂敷”设置可能也需要更具体的路径,比如右键材料库后的具体选项名称。 还需要考虑用户可能对HFSS的界面不熟悉,因此需要将每个操作的菜单路径详细列出,例如“右键点击Project Manager中的Materials文件夹,选择Add Material...”。同时,参数设置的具体输入位置,如波导端口的尺寸设置对话框中的各个字段,也需要详细说明。 此外,用户可能对求解器设置中的自适应网格和扫频设置的具体参数输入位置不清楚,需要分步骤说明每个设置窗口的打开方式和参数输入方法。例如,在设置扫频时,需要说明是在Analysis Setup中的哪个子菜单,如何选择扫频类型,输入起止频率和步长等。 在优化部分,用户可能需要知道如何启动参数扫描工具,如何定义变量,以及如何设置优化目标。需要详细说明HFSS中的Optimetrics工具如何使用,包括添加参数扫描、设置变量范围和步长,以及如何定义优化目标和约束条件。 最后,结果验证部分可能需要更详细的数据导出步骤,例如如何生成S参数图,如何导出Touchstone文件,以及如何查看场分布。用户可能还需要知道如何调整视图以检查电场和电流分布,以及如何验证设计是否符合指标。 总结来说,用户需要的是每个操作步骤在HFSS界面中的具体路径、选项名称和参数输入位置的详细描述,以确保他们能够按图索骥,逐步完成仿真设置。需要将之前的步骤分解为更小的操作单元,明确每个点击的位置和所需输入的参数,避免任何可能的歧义或遗漏。</think>以下是针对HFSS 2024 R1界面操作的超详细分步指南,包含所有菜单点击路径和参数输入位置: --- ### **一、新建项目与单位设置** 1. **创建项目** - 点击左上角菜单栏:`File → New → Project` - 在弹出的窗口中选择:`Insert HFSS Design → Driven Modal` 2. **设置单位** - 顶部菜单栏:`Modeler → Units` - 选择:`Millimeter (mm)` - 频率单位设置:`右键Project Manager中的Analysis → Properties → Frequency Unit → GHz` --- ### **二、材料定义(分步截图级指引)** 1. **定义波导材料(铝)** - 右侧工具栏:`右键Project Manager中的Materials → Add Material` - 输入参数: ```matlab Name: "Aluminum_Waveguide" Relative Permittivity (εr): 1 Relative Permeability (μr): 1 Conductivity (σ): 3.8e7 [S/m] ``` - 点击窗口右下角:`OK` 2. **设置表面粗糙度** - 在材料属性界面:`Surface Roughness → Enable` - 输入:`Roughness = 2 μm` - 勾选:`Apply to All Conductors` --- ### **三、结构建模(含界面操作路径)** #### **1. 绘制波导腔体** 1. **创建第一个腔体** - 顶部菜单栏:`Draw → Box` - 参数输入栏(底部状态栏): ``` Position: (0, 0, 0) XSize: 34.85 mm (对应WR137标准宽度) YSize: 15.8 mm ZSize: L1 = 28.5 mm(按设计需求输入) ``` - 右键结束绘制,对象重命名为:`Cavity1` 2. **添加耦合膜片** - 菜单路径:`Draw → Rectangle` - 在第一个腔体末端平面绘制窗口: ``` Width: 12 mm Height: 15.8 mm(与波导高度一致) Thickness: 1.5 mm ``` - 布尔操作:`选中腔体和膜片 → 右键 → Boolean → Subtract` --- #### **2. 精确参数化建模(含变量绑定)** 1. **定义设计变量** - 顶部菜单栏:`HFSS → Design Properties` - 点击`Add...`输入: ``` Name: "L1" Value: 28.5 mm Description: "第一腔长度" ``` - 重复添加:L2=26.3mm, L3=25.8mm, L4=27.1mm 2. **绑定变量到几何体** - 双击模型树中的`Cavity1 → Properties` - 在ZSize字段输入:`L1`(自动关联变量) --- ### **四、边界条件设置(点击层级说明)** #### **1. 波导端口设置** 1. **创建端口1** - 选中波导入口端面 → 右键 → `Assign Excitation → Wave Port` - 端口设置窗口: - `Modes → Number of Modes: 2` - `Integration Line → 点击端面底边 → 拖动到顶边(定义垂直方向)` 2. **校准端口尺寸** - 在端口属性中: ``` Width: 34.85 mm Height: 15.8 mm ``` - 勾选:`Renormalize All Modes → 50 Ohms` #### **2. PML边界设置** 1. 包裹空气盒: - 选中所有结构 → `Draw → Region → Offset: 15 mm` 2. 设置PML: - 选中空气盒外表面 → 右键 → `Assign Boundary → PML` - 层级设置:`Layers: 8` - 勾选:`Automatically Use Radiation Boundary` --- ### **五、求解器设置(对话框参数填充)** #### **1. 分析设置** 1. 添加求解频率: - 右键`Analysis → Add Solution Setup` - 输入: ``` Solution Frequency: 8 GHz Maximum Number of Passes: 6 Delta S: 0.02 ``` 2. 扫频设置: - 右键新创建的`Setup1 → Add Frequency Sweep` - 选择:`Sweep Type = Fast` - 输入: ``` Start: 4 GHz Stop: 9 GHz Step Size: 0.01 GHz ``` --- ### **六、参数优化(Optimetrics工具操作)** 1. **启动参数扫描** - 顶部菜单:`HFSS → Optimetrics → Add Parametric` - 点击`Add...`设置扫描变量: ``` Variable: IrisWidth Start: 10 mm Stop: 14 mm Step: 0.5 mm ``` 2. **设置优化目标** - 在`Optimetrics`窗口: ``` Goal 1: S21 >= -0.5 dB (4-8 GHz) Goal 2: S21 <= -30 dB (3.5-4 GHz和8.5-9 GHz) ``` --- ### **七、结果查看关键按钮位置** 1. **S参数曲线** - 右键`Results → Create Modal Solution Data Report → Rectangular Plot` - X轴选择:`Freq` - Y轴勾选:`dB(S(2,1))`和`dB(S(1,1))` 2. **场分布动画** - 右键`Field Overlays → Plot Fields → E Field → Mag_E` - 播放控制:`Animation → Start` --- ### **八、高级设置(易忽略的隐藏选项)** 1. **提高计算精度** - `Solution Setup → Advanced`标签页: ``` Lambda Refinement: 0.01 Do Lambda Refinement: Yes ``` 2. **并行计算加速** - `Tools → Options → HFSS Options → Solver` - 设置:`Number of Processors: 8` - 勾选:`Distribute Analysis` --- **操作验证技巧**: 1. 按`F7`键可实时显示模型尺寸标注 2. 右键材料库选择`Assign Material`时,注意勾选`Search in Substrate`以匹配表面涂覆 3. 双击任何边界条件可重新调出参数编辑窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值