上拉使标题背景颜色渐变
2015-05-15 18:27
246 查看
文章来源:http://blog.chengyunfeng.com/?p=497
在Play Music (v5.0) 版本中的音乐专辑详情界面引入了一个新的ActionBar效果。用户进入界面的时候ActionBar的背景为透明的,当用户向下滚动内容的时候,ActionBar背景逐渐有透明变为不透明。这种效果有两种明显的好处:
Polish the UI:对于和当前操作同步的动画而言,用户满意度比较高,因为这种情况用户感觉该动画是对操作的反馈并且更加自然。这里ActionBar的动画是由于用户滚动内容区域而引发的,而不是界面启动时候的一次性动画。
充分利用屏幕优势:在遵守系统UI设计风格的同时,这种模式可以让用户进来后先关注界面内容而不是一些ActionBar上的操作。
下面来看看如何实现Play Music 5.0中的这种ActionBar动画效果。
下载示例程序APK
如上图所示,这种模式要求ActionBar覆盖在内容之上,通过在style中设置android:windowActionBarOverlay属性即可实现这种效果。下面的代码显示如何使用自定义style:values/themes.xml
帮助
ActionBar的style定义到styles.xml文件中:
帮助
然后就可以在Activity中使用前面定义的主题样式了:
帮助
如前面介绍的一样,ActionBar的动画和内容滚动操作同步。示例中使用了一个ScrollView控件,由于该控件默认没有提供监听滚动功能的接口,所以我们要自定义这个控件:NotifyingScrollView.java
帮助
然后在布局XML文件中使用上面自定义的控件:
帮助
ActionBar背景的显示只需要根据内容滚动的距离来计算背景的透明度即可。注意下面代码中滚动距离的只不能小于0,否则会出现一些奇怪的效果。HomeActivity.java
帮助
由于JELLY_BEAN_MR1之前版本的Bug,上面的代码在JELLY_BEAN_MR1之前版本中无法正常使用。由于在之前版本中,ActionBar背景的Drawable没有注册自己为Drawable的callback,所以无法重绘自己。通过添加下面的Callback可以解决该问题:HomeActivity.java
帮助
为了避免ActionBar中的内容和内容颜色一样(比如ActionBar的文字颜色为白色,而内容图片最上面也为白色,这样在ActionBar背景透明的情况下,文字就看不清楚了),可以在内容最上方覆盖一个黑暗的半透明图层。这样即使内容颜色和ActionBar内容颜色一样的时候,也能保证ActionBar的内容可见。 唯一的缺点就是ActionBar下的内容一开始看起来比较黑暗,下面是实现方式:drawable/gradient.xml
帮助
半透明背景覆盖到图片上面(在布局文件中把ImageView用下面代码替换):
帮助
在Gingerbread (API 9)中,Android引入了一种新的方式来告诉用户可滚动内容已经滚动到头。在API 14中添加了一个EdgeEffect类并且还可以过渡滚动(和IPhone的滚动效果类似,不过没这么明显)。过渡滚动在一般情况下没什么问题,但是当内容区域和背景颜色反差比较大的时候,比较烦人。
通过快速的滑动可滚动区域可以复现这个效果,如果仔细看的话可以发现在当快速滑动到头的时候,图片上面会出现一个白色的滚动过渡的背景。
可以通过View#setOverScrollMode(int)函数并设置参数为View#OVER_SCROLL_NEVER来禁用过渡滚动来解决这个问题。 但是这样同时禁用了滚动效果。 另外一种比较好的方式是修改NotifyingScrollView类,在一些情况下设置最大过渡滚动的值为0:NotifyingScrollView.java
帮助
From:http://cyrilmottier.com/2013/05/24/pushing-the-actionbar-to-the-next-level
Read more: http://blog.chengyunfeng.com/?p=497#ixzz3aCZS3I3h
在Play Music (v5.0) 版本中的音乐专辑详情界面引入了一个新的ActionBar效果。用户进入界面的时候ActionBar的背景为透明的,当用户向下滚动内容的时候,ActionBar背景逐渐有透明变为不透明。这种效果有两种明显的好处:
Polish the UI:对于和当前操作同步的动画而言,用户满意度比较高,因为这种情况用户感觉该动画是对操作的反馈并且更加自然。这里ActionBar的动画是由于用户滚动内容区域而引发的,而不是界面启动时候的一次性动画。
充分利用屏幕优势:在遵守系统UI设计风格的同时,这种模式可以让用户进来后先关注界面内容而不是一些ActionBar上的操作。
下面来看看如何实现Play Music 5.0中的这种ActionBar动画效果。
下载示例程序APK
App的样式/主题
如上图所示,这种模式要求ActionBar覆盖在内容之上,通过在style中设置android:windowActionBarOverlay属性即可实现这种效果。下面的代码显示如何使用自定义style:values/themes.xml帮助
帮助
帮助
准备内容
如前面介绍的一样,ActionBar的动画和内容滚动操作同步。示例中使用了一个ScrollView控件,由于该控件默认没有提供监听滚动功能的接口,所以我们要自定义这个控件:NotifyingScrollView.java帮助
帮助
ActionBar的渐隐/显动画
ActionBar背景的显示只需要根据内容滚动的距离来计算背景的透明度即可。注意下面代码中滚动距离的只不能小于0,否则会出现一些奇怪的效果。HomeActivity.java帮助
帮助
增加ActionBar内容的对比度
为了避免ActionBar中的内容和内容颜色一样(比如ActionBar的文字颜色为白色,而内容图片最上面也为白色,这样在ActionBar背景透明的情况下,文字就看不清楚了),可以在内容最上方覆盖一个黑暗的半透明图层。这样即使内容颜色和ActionBar内容颜色一样的时候,也能保证ActionBar的内容可见。 唯一的缺点就是ActionBar下的内容一开始看起来比较黑暗,下面是实现方式:drawable/gradient.xml帮助
帮助
避免过渡滚动
在Gingerbread (API 9)中,Android引入了一种新的方式来告诉用户可滚动内容已经滚动到头。在API 14中添加了一个EdgeEffect类并且还可以过渡滚动(和IPhone的滚动效果类似,不过没这么明显)。过渡滚动在一般情况下没什么问题,但是当内容区域和背景颜色反差比较大的时候,比较烦人。通过快速的滑动可滚动区域可以复现这个效果,如果仔细看的话可以发现在当快速滑动到头的时候,图片上面会出现一个白色的滚动过渡的背景。
可以通过View#setOverScrollMode(int)函数并设置参数为View#OVER_SCROLL_NEVER来禁用过渡滚动来解决这个问题。 但是这样同时禁用了滚动效果。 另外一种比较好的方式是修改NotifyingScrollView类,在一些情况下设置最大过渡滚动的值为0:NotifyingScrollView.java
帮助
Read more: http://blog.chengyunfeng.com/?p=497#ixzz3aCZS3I3h
相关文章推荐
- iOS 导航栏标题文字颜色渐变
- 给TabControl中的每个tabpage标题上加X,并且设置tabControl上部除标题外的背景颜色
- CSS3实现背景颜色渐变 摘抄
- html中想要将背景颜色渐变怎么弄?
- Android GradientDrawable类的详解,设置activity的背景颜色渐变效果
- 利用css实现div背景颜色动态渐变
- android中实现背景图片颜色渐变方法
- Android修改ActionBar背景颜色和标题,菜单颜色 (清晰)
- 给TabControl中的每个tabpage标题上加X,并且设置tabControl上部除标题外的背景颜色
- 平行四边形导航,背景颜色渐变动画(不支持IE6/7/8)
- Android GradientDrawable类的详解,设置activity的背景颜色渐变效果
- CSS实现DIV层背景颜色渐变
- Flex应用程序背景颜色渐变
- css3背景颜色渐变属性
- 背景颜色渐变 css3
- 【Android 界面效果20】Android GradientDrawable类的详解,设置activity的背景颜色渐变效果
- 自定义iOS7导航栏背景,标题和返回按钮文字颜色
- 使用TtransitionDrawable来实现图片颜色渐变过渡或者实现button的背景颜色渐变,很漂亮的效果
- c#改变winform窗体 标题的字体大小 背景 和颜色
- CSS3实践之路(二): 颜色渐变(Gradient)和背景(Backgroud)