如何灵活使用 ActionBar, Google 音乐ActionBar 隐藏和显示效果
ActionBar 的历史这里就不介绍了,相信大家都清楚;在一个 app 中,如果 ActionBar 运用的好,那么将会省去大量的代码,而且整个 app 效果也相当不错,大家有兴趣可以下载 google music 这款 app 看看,界面看起来还是相当舒服的; ok,这里教大家一招快捷方便使用 ActionBar 的方法。
还记得我写过的一篇 blog Android AlertDialog对话框自定义风格的另类实现,没错,这里就是要使用那篇 blog 中讲到的这个方法。
public int getIdentifier(String name, String defType, String defPackage) {
if (name == null) {
throw new NullPointerException("name is null");
}
try {
return Integer.parseInt(name);
} catch (Exception e) {
// Ignore
}
return mAssets.getResourceIdentifier(name, defType, defPackage);
}
看到这个大家不会觉得陌生了吧!
不过这个方法需要知道 ActionBar 控件的 id 名称,这里我就直接告诉大家是 ” action_bar_container”
<android.support.v7.internal.widget.ActionBarContainer
android:id="@+id/action_bar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
style="?attr/actionBarStyle"
android:touchscreenBlocksFocus="true"
android:gravity="top"> <android.support.v7.widget.Toolbar
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationContentDescription="@string/abc_action_bar_up_description"
style="?attr/toolbarStyle"/>
还是很容易找到的。
所以,我们就能很轻易的拿到 ActionBar 的 View
具体代码如下:
private View getActionBarView(){
View view = getWindow().getDecorView() ;
int actionBarId = getResources().getIdentifier("action_bar_container","id",getPackageName()) ;
return view.findViewById(actionBarId) ;
}
拿到了 View 之后我们能干嘛?来看两张图:
ActionBar 颜色改变了,并且沿着 X轴旋转了一定角度
这。。。纵向 ActionBar,第一次见吧!
通过以上两副图,只是想说明一点,拿到了 ActionBar 的 View,我们就能灵活的控制 ActionBar,比如 Google Music 的显示和隐藏效果,下面就来看看怎么实现的。
先看动态图:
这个效果是,当 RecyclerView 向上滑动 ActionBar 显示,向下滑动 ActionBar 隐藏,并且是随着滑动的距离来控制ActionBar 的移动距离。
代码非常之简单
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int transY = (int) (mActionBarView.getTranslationY() - dy);
//控制 ActionBar 的移动距离不能超过边界
transY = (int) clamp(transY,-mActionBarHeight,0);
mActionBarView.setTranslationY(transY); }
但松手之后,还有一个动画需要处理,如果 ActionBar 的显示高度大于 ActionBar 高度的一半,则让它做全部显示动画,反之,则做隐藏动画。
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE){
checkAnimation() ;
}
}
private void checkAnimation(){
int transY = (int)mActionBarView.getTranslationY(); if (transY != 0|| transY != -mActionBarHeight){
startAnimation() ;
}
} private void startAnimation(){
float [] value = new float[2] ;
value[0] = mActionBarView.getTranslationY();
if (value[0] > -mActionBarHeight/2.0f){
value[1] = 0 ;
}else {
value[1] = - mActionBarHeight ;
}
ObjectAnimator animator =ObjectAnimator.ofFloat(MainActivity.this,"transY",value) ;
animator.setDuration(150) ;
animator.start(); }
这里主要是一些动画和平移的处理,如果不熟悉可以把源码下载下来分析。
总结:
ActionBar 的 View获取主要还是借助以下这个方法来获取
public int getIdentifier(String name, String defType, String defPackage)
需要对AcitonBar 的资源 id 的名称了解,这个可以通过查看源码知道。
源码下载地址:我是代码
如何灵活使用 ActionBar, Google 音乐ActionBar 隐藏和显示效果的更多相关文章
- ActionBar官方教程(2)选主题让应用支或不支持ActionBar及支持ActionBar的应用如何隐藏和显示
Adding the Action Bar As mentioned above, this guide focuses on how to use the ActionBar APIs in the ...
- 详解Android ActionBar之一:ActionBar概述与创建
前面一个系列中讲的是Fragment的内容,Android 3.0中除Fragment外,Action Bar同样也是一个很重要的知识点.我们经常使用Action Bar来替代传统的标题栏.如果是An ...
- Android UI ActionBar功能-启动ActionBar
官方帮助文档:http://wear.techbrood.com/training/basics/actionbar/index.html ------------------------------ ...
- 获取Google音乐的具体信息(方便对Google音乐批量下载)
Google音乐都是正版音乐, 不像百度所有都是盗链, 并且死链也多. 但有一个麻烦就是要下载Google音乐的时候得一个一个的点击下载链接, 进入下载页面再点"下载", 才干下载 ...
- Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色
android:orientation="vertical"(AndroidStudio不提示,这个要记住了) 昨天好不容易把ActionBar从溢出菜单overflow中弄出来了 ...
- 15 Actionbar的显示和隐藏
ActionBar 显示隐藏方法: 在布局文件中设置 theme主题 <?xml version="1.0" encoding="utf-8"?> ...
- 隐藏 google 地图 Logo 隐藏 百度 地图 Logo
Google 地图 var isFirstLoad=true; //地图瓦片加载完成之后的回调 google.maps.event.addListener(map, 'tilesloaded', fu ...
- 隐藏和显示效果js动画
<div id='ctt' style='margin-left: 50px; color: white'> <input type="button ...
- CSS基础 装饰 元素本身隐藏和显示效果及案例
1.visibility:hidden; 2.display: none: 区别: 1.visibility:hidden 隐藏元素本身,且在网页中 占位置 2.display:none; 隐藏元素本 ...
随机推荐
- week4_motion_of_ball_1(小球运动)——改进
# Ball motion with an explicit timer import simplegui # Initialize globals width = 600 height = 600 ...
- PLSQL developer登录身份证明检索失败的解决办法
全都在一个下图中:
- sql中charindex和cast结合使用
1.CHARINDEX函数常常用来在一段字符中搜索字符或者字符串. 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 返回 ...
- 学校作业-Dp练习
题目 ★Stringsobits01 串 考虑排好序的 N(N<=31)位二进制数. 你会发现,这很有趣.因为他们是排列好的,而且包含所有可能的长度为 N 且含有 1 的个数小于等于 L(L ...
- 关于JAVA 向上转型
最近复习中比较绕的一个地方 通过试验总结一下 若A为父类 B为子类 声明方式为: A t= new B(); 将子类对象赋值给父类对象,它编译时为父类对象,但运行时却是子类对象: 1)被声明为父类对象 ...
- (3)选择元素——(3)$()方法(The $() function)
No matter which type of selector we want to use in jQuery, we always start with the same function: $ ...
- [Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)
题目链接:http://acm.swust.edu.cn/problem/0666/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- Android百度地图之显示地图
添加地图显示 一.在百度官网下载相关的SDK (网址:http://developer.baidu.com/map/sdkandev-download.htm) 解压下载好的BaiduMap_Andr ...
- 启用nginx status状态详解
nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助.为了后续的zabbix监控,我们需要先了解nginx状态页是怎么回事. 1. 启用nginx s ...
- Python框架 Flask 项目实战教程
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...