优酷环形菜单 布局文件,使用控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍 二次菜单和三级菜单都一样的布局...小房子的图标imageView/>控件,在父控件中居中 第二级搜索图标,位于父控件的底部,上下左右maigin10dp 第二级菜单图标,位于父控件的顶部,水平居中,marginTop 10dp 第二级叹号图标...,位于父控件的底部,右边,margin 10dp 第三级的图标比较多,但是原理和第二级一样,只不过通过margin来定位 第三级channel2的图标,位于channel1图标的上面,和channel1...左边对齐,marginLeft 20dp,marginBottom 6dp 第三级channel3的图标,位于channel2图标的上面,和channel2左边对齐,marginLeft 30dp,marginBottom...6dp 第三级channel4的图标,位于父控件的上面,水平居中,marginTop 5dp 左侧半圆结束,右侧半圆和左侧一样的步骤 布局代码: <RelativeLayout xmlns:android
添加一个 ImageView 到布局中 第一个任务是添加一个 ImageView 到布局中. 在设计窗口, 找到控件选择板上的 ImageView 拖入布局....ImageView 被拖入布局后, UI 生成器就会立即询问其所使用的资源(显示在 ImageView 中的图)....下一步是创建 ImageView 顶锚点于 Layout 顶部的约束. 最终我们还可以使用左和右侧边约束锚定 ImageView 在布局中间. 本节演示了如何用拖拽连接线的方式创建控件间约束的基础....现在布局里只有单一个 ImageView, 我们来看一下 Autoconnect 是如何创建约束的 这里是本节下一部分的步骤, 作为指导, 上面的动画显示下方使用的步骤: 把 ImageView 对齐到顶部并使用...作为一个练习, 移动 TextView 到 ImageView 下方 48dp 的位置. 要做到这个, 选择 TextView 并移动它直到它位于 ImageView 下方 48dp 处.
CollapsingToolbarLayout 可以看到,Toolbar的标题放大并在下方显示,当我们向上滑动列表时,顶部Header部分的图片向上折叠隐藏,标题向上移动并缩小,同时以渐显式的方式显示蓝色主题...,直至高度缩为Toolbar的高度并成为Toolbar的背景色;向下滑动列表时,Header部分逐渐显示。...关于CollapsingToolbarLayout的属性在官网上可以查到,这里我只介绍案例中我们常用的几个属性:title标题,布局展开时放大显示在图片底部,布局折叠时缩小显示在Toolbar左侧。...注意,没有设置这个属性时,默认使用Toolbar的标题;statusBarScrim顶部视图折叠状态下,状态栏的遮罩色。通常这样设置:app:statusBarScrim="?...作为AppBarLayout的直接子控件,CollapsingToolbarLayout包裹Header部分的ImageView和Toolbar,并分别设置二者的折叠模式。
先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部。...我们先分析要解决的问题: 1、如何实现列表ListView顶部视图跟随ListView一起滑动 2、如何实现滑动过程中需要停留在顶部的视图 解决: 第一个问题,实现ListView与顶部视图一起滑动,ListView...第二个问题,怎么保证界面中间的某一部分视图滑动到顶部的时候停留在顶部呢?...刚划出顶部的时候,View2显示。...View布局:(这里是要停留在顶部的View,这里addHeadView到ListView顶部,跟随者ListView滑动到顶部消失,这时满足firstVisibleItem>=要悬浮的 item的position
这里简单的整理了一部分,按照个人使用频率排序: ConstraintLayout: 约束布局 LinearLayout: 线性布局 RelativeLayout: 相对定位布局 FrameLayout:...android:minHeight 设置布局的最小高度 android:maxWidth 设置布局的最大宽度 android:maxHeight 设置布局的最大高度 当 ConstraintLayout...文末已附上链接地址,这里只对个人感兴趣的部分做出节选。...] 传统布局绘制层级: ImageView /> ImageView /> ...View 顶部 android:layout_toEndOf 当前 View 位于目标 View 右侧 android:layout_below 当前 View 位于目标 View 底部 android
Android ListView头部视差控件 效果展示 代码实现 静态布局,为ListView增加头部的View mListView = (ParallaxListView) findViewById...(R.id.listview); mHeadView = View.inflate(this, R.layout.head, null); //异步解析xml中的布局...获取头部控件的大小需要在布局解析完成后才能知道,否则得到的将是0, 通过设置监听器mHeadView.getViewTreeObserver().addOnGlobalLayoutListener, 当布局文件解析完成后.../** * 当ListView被滑动到顶部和底部时会调用此方法 * * @param deltaY y方向滑动的距离。...正:底部到头;负:顶部到头 * @param maxOverScrollY 到头后,最大可滚动的范围 * @param isTouchEvent 是否是触摸滑动。
功能要求1.页面具有标题2.具有四个页面,页面具有底部选择框,同时具有选择事件,当点击选择事件的时候进行页面切换3.页面内容不超出边界且清晰思路分析该微信界面由三部分组成页面顶部标题栏(top.xml)...中间内容页面底部导航栏(bottom.xml)所以我们需要编写上述几个xml布局页面,分别分析每部分的布局内容及要求: 顶部标题栏:此栏需有app的标题,标题大小颜色自定义且居中显示,背景色自选 ...中间内容页面:由于本app是仿微信界面,所以设置了四个页面,分别显示不同的内容 底部导航栏:四个图标,单击可以切换中间内容页面,故该布局文件中包含四个ImageButton,界面切换部分需要用Fragment...wrap_content" android:gravity="center" android:text="微信" /> 顶部布局实现... 编写top.xml,实现顶部控件。
imageView = new ImageView(image1); borderPane.getChildren().add(imageView); Scene scene...图像视图、addEventHandler添加事件处理程序、KeyEvent键盘事件、MouseEvent鼠标事件、BorderPane布局编辑BorderPane布局顶部,底部,左,右或中心区域中的子节点...BorderPane的顶部和底部区域允许可调整大小的节点占用所有可用宽度。左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。默认情况下,所有边界区域尊重子节点的首选宽度和高度。...放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:● 顶部: Pos.TOP_LEFT● 底部: Pos.BOTTOM_LEFT● 左侧: Pos.TOP_LEFT● 右侧: Pos.TOP_RIGHT...imageView =new ImageView(image); imageView.setTranslateX(150); imageView.setTranslateY
从主界面的布局你可以看出,我们在上面放置了一个购买的布局,可能你会想,先让上面的布局隐藏起来,等下面的布局滑动上来就将其显示出来,如果这样子就跟我之前写的那篇文章差不多,效果不是很棒,所以这篇修改版的肯定不是这样子的... LinearLayout mBuyLayout; /** * 位于顶部的购买布局 */ private LinearLayout mTopBuyLayout; ...View的四个点的坐标,他的坐标不是相对屏幕的原点,而且相对于他的父布局来说的, 我们在主页面最外层的ViewGroup添加了布局状态改变的监听器,当绘制完了屏幕会回调到方法onGlobalLayout...,上面的购买布局的上边缘到myScrollView的上边缘的距离等于mBuyLayout.getTop()(即下面布局的上边缘到myScrollView的上边缘)所以刚开始上面的购买布局和下面的购买布局重合了...mBuyLayout.getTop()的时候,表示购买布局上边缘滑动到了导航栏布局,所以此时购买布局的上边缘与myScrollView的上边缘始终要保持scrollY这个距离,所以购买布局才会一直在导航栏下面
在各个布局文件里,最外围的是CoordinatorLayout这个控件,这个有什么作用呢,就我的大白话来说就是协调子View之间动作的一个父View,通过Behavior来给子view实现交互的。...内部的子View通过在布局中加app:layout_scrollFlags设置执行的动作。...,View就暂时不去往下滚动,直到ScrollView滑动到顶部不再滑动时,View再继续往下滑动,直到滑到View的顶部结束。...最后snap这是属性是子View不会存在局部显示的情况,滚动Child View的部分高度,当我们松开手指时,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕。...CollapsingToolbarLayout只要有这方面: 1.title展开时是最大的,然后随着收缩会越来越少,直到屏幕的顶部,通过app:title设置title,不然就默认。
前言 在程序中经常会遇到九宫格的样式实现,如下图: ? 下面我们看看实现的步骤。 一个整体的容器部分。...就是上图中包括整个图片项个各个部分,这里我们使用gridView(表格布局)来实现 2.整个界面里需要注意的是 “重复的部分”,就是 各个图片项和,图片下方显示的文字了。那么我们需要描述这个部分。...在描述时,要说明图片位于上方,文字位于下方。 3.迭代,或者说重复的将各项 插入(放入)到容器内。 具体怎么实现。...指定“可重复的子项”,就是需要迭代显示的部分 新建一个布局文件layout_gridview_item.xml 的布局文件的ID new String[]{"itemImage","itemText"}, //指定 数据的列 new int[]{R.id.imageView_ItemImage,R.id.textView_ItemText
(下面是一些废话) 要求的效果是这样的,顶部有部分悬浮,接着是一些布局,在下面是几个可切换的Tab页面,然后滚动的时候~~吧啦吧啦吧啦吧啦~~ 还是直接看图吧 ?...思路 先说说实现的思路吧,上面的效果大致可以分成两个部分: 1、Tab向上滚动到顶部时悬浮 Tab滚动后悬浮在顶部嘛~~ 这效果使用CoordinatorLayout + AppBarLayout就能轻松实现...额,应该可以勉强看懂后面的内容) 2、顶部悬浮以及“被顶走”的效果 只要在CoordinatorLayout外面套一层FrameLayout,然后把这个顶部的布局改在上面。...最后值需要实现“被顶走”的效果就好了。 顶部“被顶走”的效果 这时候,布局稍微改变下。 布局被盖住了一部分,因此在LinearLayout中加了与悬浮部分相同高度的空View。 布局是完成了,那个“被顶走”的效果怎么实现呢?
其中,底盘和唱针均用ImageView实现,然后使用ViewPager加载ImageView实现唱片的切换。如图: ? 唱片布局如下: 的切换只有你仔细观察就会明白它的流程了。项目架构介绍到这里,接下来是部分视觉效果以及设计思路的介绍和项目的一些难点介绍。...LayerDrawable有点类似PhotoShop图层的概念。 我们在分析唱片布局的时候发现原View包含两个ImageView,估计是一个用来显示唱盘,一个用来显示专辑图片。 ?...“BlurUtil”,考虑到这部分代码可能会阻塞UI线程,因此将其放着单独线程中执行。...初始状态为播放时,点击暂停按钮,此时唱针移到顶部。 初始状态为播放时,手指按住唱盘并稍微偏移,等唱针未移到顶部时,立刻松开手指,此时唱针回到顶部后立刻再回到唱盘位置。
和尚我最近正在处理客户端顶部沉浸式展示图片,借此整理了一下和尚自己研究测试的沉浸式状态栏。...沉浸式状态栏大家都很熟悉,即 APP 界面图片延伸到状态栏, 应用本身沉浸于状态栏,即顶部不会默认展示系统的黑条。和尚我技术有限,理解不透彻,仅分享一下自己应用测试中可以呈现的几种样式。 ?...---- 公共的步骤: 布局文件中添加使用 Toolbar 控件(纯色 Toolbar 背景色为颜色,图片 Toolbar 样式设置背景色为图片或添加一个 ImageView 控件),在文件根布局与 Toolbar...和尚我用的是作为 Toolbar 背景图 background 方式处理,使用 ImageView 控件时还需要单独处理图片,并有部分拉伸的可能。 图片作为布局背景沉浸样式 ?...图片作为布局背景样式 ? 图片被拉伸 图片作为布局背景的方式比较简单,方式与公共的相同,只是不需要 Toolbar 而已。
其中,底盘和唱针均用ImageView实现,然后使用ViewPager加载ImageView实现唱片的切换。如图: ? 唱片布局如下: 的切换只有你仔细观察就会明白它的流程了。项目架构介绍到这里,接下来是部分视觉效果以及设计思路的介绍和项目的一些难点介绍。 解决加载大图OOM问题 解决大图加载一般有几种方案: 1....我们在分析唱片布局的时候发现原View包含两个ImageView,估计是一个用来显示唱盘,一个用来显示专辑图片。 ?...“BlurUtil”,考虑到这部分代码可能会阻塞UI线程,因此将其放着单独线程中执行。...初始状态为播放时,点击暂停按钮,此时唱针移到顶部。 初始状态为播放时,手指按住唱盘并稍微偏移,等唱针未移到顶部时,立刻松开手指,此时唱针回到顶部后立刻再回到唱盘位置。
有效上滑 如上如,锁屏状态下,定义有效滑动阈值standardH,若上滑高度差超过standardH,则判断为有效滑动,布局滑动至屏幕顶部(不可见);否则如向下滑动、向上滑动距离不够等,都作为无效滑动...,此时布局恢复至原来位置。...阻尼滑动效果 从图中可以看到鼠标原来的位置在“更多精彩”图标的顶部,随着向上拖动,鼠标开始偏离图标顶部,就好像一根橡皮筋,拉得越开,需要用更大的力,阻尼滑动就给我们这样的感觉。...(伪)代码实现 首先按自定义控件的套路来,new一个类,继承LinearLayout,填充写好的布局,重写onTouch方法: public class PagerLayout extends LinearLayout...,填充布局,这里我们考虑到布局需要填充数据的情况,封装了常用的方法,大家可以根据自己的业务逻辑进行相应封装。
比如使用scaleAnimation使布局缩放,但是布局的实际大小并没有改变,所以会遮盖旁边的布局,并不是把布局撑开,挤压其他布局。...整个粉红色的区域向上淹没整个页面 展开 —— 从状态2到状态3。当淹没整个页面后,从中间展开直至整个页面 整体布局 这两个阶段就是实际上就是通过两部分动画的依次执行来实现的,我们先来看看布局: 的部分,一开始高度是0 两个textview —— 中间的圆形button实际上由上下两个独立的部分组成的,而且这两部分中间夹着spread_view(这么布局是为了第二阶段的动画...,下面会详细讲解) 这里要注意,我们使用了textview而不是imageview来实现button的布局,是因为如果使用imageview,当第二阶段展开到button的两部分超出屏幕顶部和底部时,imageview...区域压缩导致图片会被缩小而不是溢出,差别如下 使用ImageView的效果 使用TextView的效果 所以我们这里使用TextView。
复制代码 布局 常见的表盘有方形和圆形两种,使用普通布局的情况下,可能会出现这种情况: 为了使圆形表盘上的内容不超出边界,同时兼容方形表盘,我们可以使用 BoxInsetLayout 这个布局: 的,我们先看看它的效果: 从手表顶部向下滑,会出现一个导航栏,显示当前页面的图标和标题。...navigation_drawer.addOnItemSelectedListener { pos -> // TODO 切换页面 } 复制代码 这里面的 controller.peekDrawer() 是让导航栏在顶部露出一小部分...,controller.peekDrawer() 会在底部露出一小部分操作栏,如果当前页面是一个列表,这一部分会在列表滑动时隐藏,在列表到顶部和底部时显示: 露出部分默认会显示操作栏第一项的图标,可以在布局中添加...它包裹了抽屉栏的主视图 drawer_content 和关闭时露出部分的视图 peek_view。
View,接着我们来讲讲常用的自定义组合控件,自定义组合控件就是多个控件组合起来成为一个新的控件,主要用来解决多次重复的使用同一类型的布局。...比如我们应用的顶部的标题栏,还有弹出的固定样式的dialog,这些都是常用的,所以把他们所需要的控件组合起来重新定义成一个新的控件。...1.组合控件的xml布局 我们现在就自定义一个顶部的标题栏,当然实现标题栏有很多的方法,我们来看看自定义组合控件如何去实现。...首先我们先定义我们组合控件的布局(view_customtitle.xml): <?xml version="1.0" encoding="utf-8"?...android:gravity="center" android:padding="15dp" /> 很简单的布局
这样有利于程序的解耦。所以我们才可以在XML文件中定义各种资源类型,并在其他的xml文件或java代码中进行引用。 String资源 字符串资源所对应的xml文件位于/res/values/目录下。...颜色资源所对应的xml文件位于/res/values/目录下。 其默认名为colors.xml 对应于R类中的内部类的名称:R.color 文件的根元素为resources: 定义: 的布局中有多个view需要指定相同的尺寸,那么我们可以事先在dimen资源中对该尺寸进行定义,之后便可以很方便地复用。 dimen资源所对应的xml文件位于/res/values/目录下。...文件位于/res/values/目录下。...默认情况下,活动的顶部: ? 设置 true 之后,活动的顶部: ?