在很多场合,我们都能看到这样的效果,当鼠标移动到某个元素上面时,该元素会变成另外一种颜色,达到强调的效果。...下面,我们来实现当鼠标移动到用户窗体按钮上时,会使用颜色高亮显示,让用户窗体更生动,如下图1所示。 ? 其实,你在图1中看到的按钮并不是用户窗体内置的传统命令按钮,而是使用图像控件来制作的。...,绿色按钮显示,白色按钮隐藏。...,绿色按钮显示,白色按钮隐藏。...但是,如果用户将鼠标放置在除这两个按钮之外的其他地方时,我们不希望这两个按钮显示绿色,因此要使用用户窗体的MouseMove事件: Private SubUserForm_MouseMove(ByVal
设计思路 既然玩那就干脆玩花一点,一步到位给中间按钮加了个简单的点击动画,点击后FAB在垂直方向上执行一次往返位移,同时底部导航栏上的凹槽大小跟随着FAB的凹陷深度动态变化,需要实现的功能点以及思路大体是下面的几个...: 创建好了带导航栏的Activity后界面默认是这样子的效果: 接下来就是根据需求在小细节上修修补补了,由于只需要显示两个导航item,另外需要在导航栏的中间给大按钮预留个空位,于是在导航栏的menu...假设按钮在垂直方向上的当前位移距离大小为d,当按钮向上运动时导航栏上的凹槽应该往中间收缩,在收缩过程中保持两旁小圆半径大小和30°夹角不变,这时另中间圆的圆心同步在垂直方向上移动-d,动态修改distance...的值,由此一来可以达到凹槽收缩的效果,按钮向下运动时同理: 另外还需要考虑按钮完全位于导航栏上方时的情况,这种情况下直接使用直线来代替原来的曲线部分。...cancel() }) } objectAnimation.start() } 代码逻辑很简单,onFabClick方法被触发时,按钮会在垂直方向上在给定的运动区间内做一次往返位移
需求 实现一个对话框,它出现时,从底部向上逐渐移动出现,关闭时,逐渐向下移除屏幕: 1.点击 显示 按钮时,一个dialog对话框从底部慢慢向上弹出。...2.关闭dialog时, dialog缓慢的移动向底部消失。很平滑的效果。 ? ?... 在activity中,指定对话框的 window的 setWindowAnimations,指定一个动画 public class MainActivity extends Activity...没有指定结束点,结束点就默认 本身应该显示的位置(即将显示的位置)。 同理,dialog_exit定义了离开时动画。...该动画未指定开始位置,指定了结束位置是 其父容器的 100% 位置 ,这样就慢慢的向下消失在屏幕以外。
Toast(仅限Android)主要用于系统消息传递。 它们也显示在屏幕的底部,但不能从屏幕中滑走。 用法 一次只能显示一个snackbar。...行为 Snackbars激活后从屏幕的底部向上滑出。 ---- 用法 一次只能在屏幕上显示一个Snackbar。 位置 Snackbars出现在屏幕上的大多数元素的上方,与浮动操作按钮的高程相同。...行为 入口时,Snackbars激活时从屏幕底部向上出现。 出现时不会阻碍用户输入。...在Android上,当Snackbars出现时有不相关的Dialog或Popup,Snackbars超时后将在重新获得窗口焦点时重置。 这是为了确保用户能够在预期时间内阅读Snackbar。...不要挡住浮动操作按钮(Floating Action Button) 纵向移动浮动动作按钮以适应Snackbar的高度。 ? 连续Snackbars 一个时间只有一个Snackbar能展示。
CollapsingToolbarLayout 可以看到,Toolbar的标题放大并在下方显示,当我们向上滑动列表时,顶部Header部分的图片向上折叠隐藏,标题向上移动并缩小,同时以渐显式的方式显示蓝色主题...关于CollapsingToolbarLayout的属性在官网上可以查到,这里我只介绍案例中我们常用的几个属性:title标题,布局展开时放大显示在图片底部,布局折叠时缩小显示在Toolbar左侧。...当设置为1.0,滚动列表时图片不会折叠移动; 代码实现: 关于CoordinatorLayout作为根布局容器如何协调子控件之间的交互行为,可以参考上一篇文章,这里我介绍一下本例中几个新的注意点。...;前面介绍CollapsingToolbarLayout属性时介绍到了statusBarScrim的使用,其实也可以通过android:fitsSystemWindows和values-v21中style...示例源码我在GitHub上建立了一个Repository,用来存放整个Android Material Design系列控件的学习案例,会伴随着文章逐渐更新完善,欢迎大家补充交流, 代码地址:github.com
在 View 需要变换位置时,为其添加适当的滑动效果,获得更好的用户体验,下面来看一下怎样去实现 View 的滑动: 1、scrollBy / ScrollTo 方法: View 控件提供的两个方法...,向下移动,否则向上移动) scrollTo 方法将 View 基于父容器左上角分别向水平移动 x 绝对值的距离(x 为正,向右移动,否则向左),向竖直方向移动 y 绝对值的距离(y 为正,向下移动...,否则向上移动) 下面通过一个小例子来理解两个方法,新建一个 Android 工程: activity_main.xml: <?...里面的内容(子控件或者是显示的内容),并且移动的方向和方法的参数正负是相反的(也可以借助参考物来理解(父容器移动,子控件不移动,相对父容器来说,子控件移动的方向是与其相反))。...,第一个参数为滑动的子 View,第二个参数是水平方向上移动的距离, * 第三个参数为水平方向上较上一次的增量,通常只需要返回 left 就行了,如果不重写这个方法,
在应用切换时提供了类似卡片的 UI,此外还加入了统一的手势,用户可以通过轻轻横扫来删除最近的应用和通知。滑动手势从诞生第一天起就将易用性作为重点,并在以后广泛出现于其他 UI 系统和应用之中。...“显示全部应用” 的按钮被手势取代: 只需在主屏幕向上滑动即可显示所有应用。...虽然这种做法在开发过程中曾经引起过争议,但它最终受到了用户的欢迎,因为向上滑动是一个广受认可的手势操作,它要比精确点击按钮容易得多。...我们还将快速搜索框移动到屏幕底部,这样给人的感觉更自然,用户轻松就可以点到它。...这个用于显示所有应用的向上滑动手势现在可以在任何应用中运行,可以显示您最近使用的应用,可能接下来会启动的应用,当然还有包含所有应用的列表。
在项目中新建一个目录 SupportLib , 并添加对 android-support-v4.jar 文件(位于 android-sdk/extras/android/support/v4 目录, 如果没有..._viewPager.CurrentItem = itemPosition; return true; } } 向上导航 所谓的向上导航, 就是在 Activity 的图标上显示一个向左的箭头,...要显示向上导航的按钮, 需要在 OnCreate 方法中对 ActionBar 做如下设置: // 设置 ActionBar var actionBar = this.ActionBar; // 将 Home...按钮显示为向上, 提示用户点击这个按钮可以返回应用程序的上一级。...actionBar.SetDisplayHomeAsUpEnabled(true); 同时还需要重写 OnOptionsItemSelected 方法, 当用户点击 Home 按钮时, 做相应的处理,
CoordinatorLayout帮助我们协调它所包含的子view之间的交互,这一点在我们后面讲如何根据滚动的变化让按钮动画隐藏与显示的时候有用。...向下移动 FAB消失,向上移动时,FAB出现。 ---- embedding(嵌入)-floatingactionbutton-in-header 效果图 ?...Issues: 本文编写时,FAB 支持库仍然存在一些 bug,在 Kitkat 和 Lollipop 中分别运行示例代码,可以看到如下结果: Lollipop 中的 FAB: ?...Issues 1: Android 4.4 和 5.0 中边缘显示 很容易看出,Lollipop 中存在边缘显示的问题。..."/> Issues 2: Android 5.0 中阴影显示 再看一遍上面的截图,会发现 Kitkat 中有阴影显示,而 Lollipop 中并没有。
在不同的时刻指定、排列和执行请求。一个命令对象可以有与初始请求无关的生存期。 需要支持取消操作。 支持修改日志功能,这样当系统崩溃时,这些修改可以被重做一遍。 需要支持事务操作。...ConcreteCommand:具体命令角色,该类实现了Command接口,在execute方法中调用接收者角色的相关方法,在接收者和命令执行的具体行为之间加以弱耦合。...; //向右移动的命令对象引用 private UpCommand upCommand; //向上移动的命令对象引用 private DownCommand downCommand; //向下移动的命令对象引用...public void toRight(){ rightCommand.execute(); commandList.add(rightCommand); } /** * 按下向上按钮...更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图
在此,我将该按钮封装成为一个控件,并通过策略模式的方式实现录音和界面的解耦合,以方便我们在实际情况中对录音方法的不同需求(例如想要实现wav格式的编码时我们也就不能再使用MediaRecorder,而只能使用...实现思路: 1.在微信中我们可以看到实现语音对讲的是通过点按按钮来完成的,因此在这里我选择重新自己的控件使其继承自Button并重写onTouchEvent方法,来实现对录音的判断。...2.在onTouchEvent方法中, 当我们按下按钮时,首先显示录音的对话框,然后调用录音准备方法并开始录音,接着开启一个计时线程,每隔0.1秒的时间获取一次录音音量的大小,并通过Handler根据音量大小更新...Dialog中的显示图片; 当我们移动手指时,若手指向上移动距离大于50,在Dialog中显示松开手指取消录音的提示,并将isCanceled变量(表示我们最后是否取消了录音)置为true,上移动距离小于...-- 显示对话框时当前的屏幕是否变暗 -- <item name="<em>android</em>:backgroundDimEnabled" false</item </style RecordStrategy
——《微卡智享》 本文长度为1679字,预计阅读6分钟 前言 现在手机端各大视频APP基本都有悬浮窗视频模式,我以前文章《Android制作带悬浮窗控制的录屏程序Demo》《Android实现可移动的悬浮窗...》有介绍过悬浮窗的使用方式,而到了Android8.0时推出来画中画模式,就是让当前的Activity缩小后显示在其它Activity的上方,使用起来也非常的简单,本篇我们就来试试Android8.0后推出的画中画模式...,同时画中画的按钮隐藏了,退后时文字改为正常模式,并且按钮也再显示出来。...进入画中画模式中加入了actions的按钮,点击后返回到正常模式,然后显示的比例我们由默认的横屏改为竖屏了。 setActions设置控件,基本就是按钮的操作控制。...从 Android 12 开始,您可以使用 setAutoEnterEnabled 标志,在手势导航模式下向上滑动转到主屏幕时,更流畅地过渡到画中画模式。所以上图中加入了判断SDK版本设置的参数。
一、引言 以前在饿了么上面订餐的时候,曾经看到过这么一个特效,就是将商品加入订单时,会有一个小球呈抛物线状落入购物车中,然后购物车中的数量会改变。具体的效果如下图。 ?...下面开始分析及实现 二、分析 当点击购买按钮的时候,我们在布局上加入一个动画层,然后让小球在动画层上做抛物线运动,就可实现上图中的效果了。 说到做抛物线运动,当然需要数学上的一点小知识。...在android的动画中,可以设置Interpolator属性。...所以我们只要给小球分别设置X和Y方向上的TranslateAnimation平移动画,在设置相应的Interpolator ,即可实现抛物线效果。...startLocation[0] + 40; // 动画位移的y坐标 int endY = endLocation[1] - startLocation[1]; //设置X方向上的平移动画
(2) 暂停状态 活动处于暂停状态时,活动界面部分可见,用户不能够对它进行操作,比如点击删除图片按钮,在图片显示界面(活动)上会弹出一个对话框,对话框让用户确认是否删除图片,对话框没有占据整个屏幕,因此显示图片的界面...在界面上的各种交互操作通常定义为各种事件,比如:按下按钮,在屏幕上通过各种滑动来滚动显示或切换界面等等。所有这些操作都通过系统提供的事件处理机制来实现。...在控件对齐时要注意控件的排列方向,比如:当LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变...以下三种显示效果分别对应多选框和单选按钮。...ScaleType.FIT_CENTER把图片按比例扩大/缩小到View的宽度,居中显示。当点击“选择图片”按钮时,打开文件夹,用户可以选取移动设备上的图片。
android:gravity: 这个是针对控件里的元素来说的,用来控制元素在该控件里的显示位置。...例如,在一个Button按钮控件中设置如下两个属性, android:gravity=”left”和android:text=”提交”,这时Button上的文字“提交”将会位于Button的左部。...同样,当我们在Button按钮控件中设置android:layout_gravity=”left”属性时,表示该Button按钮将位于界面的左部。...水平方向裁剪 我们主要来看看 center_vertical和center_horizontal两个属性值,center_vertical是指将对象在垂直方向上居中对齐,即在从上到下的方向上选择中间的位置放好...=“bottom|center_horizontal” ,但该TextView并没有显示在屏幕的下方正中央,表明只有center_horizontal属性起了作用,这正是因为我们使用了LinearLayout
最麻烦的是涉及到默认控件,比如单选按钮、复选框、tab切换等等,这些控件需要一个定制的视图来实现显示Android上类似iOS的控件或iOS上类似Android的控件。...左边是标准的Android按钮;右边是标准的iOS按钮 还有一种非常有特点的按钮类型——在Android上叫做浮动按钮,在iOS上叫做活动按钮。浮动按钮用来展示应用的主要操作。...模态视图又有两种不同类型:具有不同操作内容的模态列表和用户点击“共享”图标后显示的应用列表。在iOS上也能找到类似的组件,但是在设计风格和布局上差异比较大。...共享相同的父级界面(例如标签切换时的内容)一致性的移动能够强化他们的关系。...标签选项卡固定在一个位置不变,内容界面在水平方向上进行移动 在应用的最上层,切换目标通常被分在主要任务(这些任务可能彼此不相关)上。这些界面通过改变不透明度和缩放值来进行适当的转换。
二需求 我们如何能封装一个没有耦合性的自定义键盘,笔者能想到的需求如下: 动态添加到任何布局中 解决和系统键盘显示冲突 动态绑定系统输入框 有show和hide动画,让键盘显示更加优雅 没有耦合,使用方便...,尽可能让原生属性有效 键盘特殊按钮监听 解决键盘覆盖输入框的问题 点击非键盘,非输入框区域,让键盘消失。...3.7键盘遮挡 这里就需要首先判断是否已经被遮挡,如果被遮挡,需要算出来整个布局需要移动多少,当然键盘布局不能移动。移动方式可以通过属性动画或者scrollBy方法。这里我选择属性动画。...= 0) { rootView.setTag("move"); //遍历所有的子View,让其向上移动改移动的高度 for (int i = 0; i < rootView.getChildCount...= null) { //遍历所有的子View,让其向上移动改移动的高度 for (int i = 0; i < rootView.getChildCount(); i++) {
如果我们希望自己添加一些更高级的样式, 那么我们可以通过使用 MaterialButton 样式中的一组属性来完成此操作. app:icon: 用于定义在按钮开始时显示的 drawable ?...我们可以像这样在布局中添加一个 Chip , 使用 app:chipText 属性设置 Chip 中显示的文本: <android.support.design.chip.Chip android...如果禁用, 则 检查行为与 Button 相同 app:chipIcon: 用于在 Chip 中显示一个图标 ? app:closeIcon: 用于在 Chip 中显示一个关闭按钮 ?...这样做时, 你需要将 ChipGroup 封装在滚动视图(如 HorizontalScrollView )中, 以便用户可以滑动正在显示的 Chip....但是设置值会允许 FAB 垂直向上移动. ? app:backgroundTint: 用于为视图的背景上色.
举个 case 来说,现在有一个按钮通过视图动画在 x 轴方向上向右移动了 200 px(像素) 的距离,按钮显示的位置虽然改变了,但是点击移动后的按钮并不能相应点击事件,只有点击这个按钮没有移动之前的位置才能响应这个按钮的点击事件...px 的位置, * 然后再从这个位置移动到距离对象初始位置 x 轴方向上 -100 px 的位置, * 这里的数字都是以对象的初始位置作为参考,...这是一个简单的平移动画,当按钮移动完成之后,我们再次点击这个按钮(明显它已经不在原来的位置)时,它仍然响应了点击事件,重新开始了动画,这证明属性动画确实是“原原本本的对 View 本身进行操作”。...-- 平移动画,在 2s 内 x y 分别向右和向下移动 100 px,无限次重复,重复模式为来回重复--> <translate android:duration="2000"...-- 平移动画,在 2s 内 view 以 view 的中心点为支点,view 的宽高缩放为原来的两倍,无限次重复,重复模式为来回重复--> <scale android:duration
当点击了scrollTo按钮时,我们调用了LinearLayout的scrollTo()方法,当点击了scrollBy按钮时,调用了LinearLayout的scrollBy()方法。...第二个参数y表示相对于当前位置纵向移动的距离,正值向上移动,负值向下移动,单位是像素。 那说了这么多,scrollTo()和scrollBy()这两个方法到底有什么区别呢?...可以看到,当我们点击scrollTo按钮时,两个按钮会一起向右下方滚动,因为我们传入的参数是-60和-100,因此向右下方移动是正确的。...里的每一个子控件在水平方向上进行布局。...startScroll()方法接收四个参数,第一个参数是滚动开始时X的坐标,第二个参数是滚动开始时Y的坐标,第三个参数是横向滚动的距离,正值表示向左滚动,第四个参数是纵向滚动的距离,正值表示向上滚动。
领取专属 10元无门槛券
手把手带您无忧上云