Android实现透明度可变的标题栏效果

我们在做类似于个人主页类应用的时候,可能会遇到这样的需求,效果如下

相信大家应该看明白是什么效果了,就是随着列表的滑动,上面的标题栏的透明度会随之变化。在IOS中,有很多的软件有这种效果,下面,我们看一下这种效果是如何实现的。
先看一下项目的目录

我们可以看到,目录结构很简单,因为我这个地方是使用的XListview代替的Listview,有很多文件都是XListview自带的,所以显得文件多一些,如果没使用过XListview,请先百度XListview看看。
这里面,我们需要重点关注的只有一个文件,就是MainActivity,我们的关键代码都在这里,下面,我们看一下代码实现

/** * 透明度可变的标题栏 * * @author Zhao KaiQiang * * @Time 2014-6-20 上午11:46:42 */ public class MainActivity extends Activity implements OnScrollListener { private XListView listView; // 标题栏的布局 private RelativeLayout rl_title; // ListView的头布局 private View headerView; // 头布局的高度 private int headerHeight; private LayoutInflater inflater; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rl_title = (RelativeLayout) findViewById(R.id.rl_title); listView = (XListView) findViewById(R.id.list); rl_title.getBackground().setAlpha(0); inflater = LayoutInflater.from(this); headerView = inflater.inflate(R.layout.header_listview, null); // 添加头布局 listView.addHeaderView(headerView); listView.setAdapter(new MyAdapter()); // 设置滚动监听 listView.setOnScrollListener(this); // 设置可以刷新与加载更多 listView.setPullLoadEnable(true); listView.setPullRefreshEnable(true); listView.setXListViewListener(new IXListViewListener() { @Override public void onRefresh() { // 单纯的模拟刷新过程 handler.postDelayed(new Runnable() { @Override public void run() { listView.stopRefresh(); } }, 500); } @Override public void onLoadMore() { // 单纯的模拟加载过程 handler.postDelayed(new Runnable() { @Override public void run() { listView.stopLoadMore(); } }, 500); } }); } // 自定义适配器 private class MyAdapter extends BaseAdapter { // 默认显示10个item @Override public int getCount() { return 10; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.item_list, null); } return convertView; } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } // 最重要的方法,标题栏的透明度变化在这个方法实现 @Override public void onScroll(AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 判断当前最上面显示的是不是头布局,因为Xlistview有刷新控件,所以头布局的位置是1,即第二个 if (firstVisibleItem == 1) { // 获取头布局 View view = listView.getChildAt(0); if (view != null) { // 获取头布局现在的最上部的位置的相反数 int top = -view.getTop(); // 获取头布局的高度 headerHeight = view.getHeight(); // 满足这个条件的时候,是头布局在XListview的最上面第一个控件的时候,只有这个时候,我们才调整透明度 if (top <= headerHeight && top >= 0) { // 获取当前位置占头布局高度的百分比 float f = (float) top / (float) headerHeight; rl_title.getBackground().setAlpha((int) (f * 255)); // 通知标题栏刷新显示 rl_title.invalidate(); } } } else if (firstVisibleItem > 1) { rl_title.getBackground().setAlpha(255); } else { rl_title.getBackground().setAlpha(0); } } }

代码是不是不复杂?我们只需要实现onScroll方法就可以,在这里面,完成我们对HeaderView的位置的检测,然后通过HeaderView的高度和显示的高度来计算比例,设置到TitleBar的背景图片的透明度即可。

是不是很神奇,希望大家喜欢。

时间: 2024-10-10 07:47:49

Android实现透明度可变的标题栏效果的相关文章

Android实现透明度可变的标题栏效果_Android

我们在做类似于个人主页类应用的时候,可能会遇到这样的需求,效果如下 相信大家应该看明白是什么效果了,就是随着列表的滑动,上面的标题栏的透明度会随之变化.在IOS中,有很多的软件有这种效果,下面,我们看一下这种效果是如何实现的. 先看一下项目的目录 我们可以看到,目录结构很简单,因为我这个地方是使用的XListview代替的Listview,有很多文件都是XListview自带的,所以显得文件多一些,如果没使用过XListview,请先百度XListview看看. 这里面,我们需要重点关注的只有一

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种动画效果,如Snackbar与FloatingActionButton的配合显示效果,就是以CoordinatorLayout作为根布局来实现的 CoordinatorLayout提供Behaviors接口,子View通过实现Behaviors接口来协调和其它View之间的显示效果,可以这么理解: CoordinatorLayout让其子View之间互相知道

Android 沉浸式状态栏及悬浮效果_Android

一.概述 现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实不错,如果Tab滑上去,用户可能还需要滑下来,在来点击Tab,这样确实很麻烦.沉浸式状态栏那,郭霖说过谷歌并没有给出沉浸式状态栏这个明白,谷歌只说了沉浸式模式(Immersive Mode).不过沉浸式状态栏这个名字其实听不粗,随大众吧,但是Android的环境并没有iOS环境一样特别统一,比如华为rom的跟小米rom的虚拟按键完全不一样,所有Androi

Android 沉浸式状态栏及悬浮效果

一.概述 现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实不错,如果Tab滑上去,用户可能还需要滑下来,在来点击Tab,这样确实很麻烦.沉浸式状态栏那,郭霖说过谷歌并没有给出沉浸式状态栏这个明白,谷歌只说了沉浸式模式(Immersive Mode).不过沉浸式状态栏这个名字其实听不粗,随大众吧,但是Android的环境并没有iOS环境一样特别统一,比如华为rom的跟小米rom的虚拟按键完全不一样,所有Androi

Android中通过ActionBar为标题栏添加搜索及分享视窗

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.ActionBar的主要目的是: 1.提供一个用于识别应用程序的标示和用户的位置的专用空间. 2.在不同的应用程序之间提供一致的导航和视觉体验. 3.突出Activity的关键操作(如"搜索"."创建"."共享"等),并且在可预见的方法内给用户提供快捷的访问.

安卓UI设计与开发教程 顶部标题栏(六)实现悬浮式顶部和底部标题栏效果

这篇文章是实现了百度贴吧一个老版本的悬浮式顶部和底部的标题栏效果,觉得还挺有意思的就想跟大家 一起分享一下,也算是对前面学过的UI设计知识的一个总结吧.好的,话不多说,请大家先看效果图. 一.实现效果图 开发教程 顶部标题栏(六)实现悬浮式顶部和底部标题栏效果-html悬浮顶部底部按钮">

Android实现隐藏状态栏和标题栏

  这篇文章主要介绍了Android实现隐藏状态栏和标题栏的相关资料,需要的朋友可以参考下 隐藏标题栏需要使用预定义样式:android:theme="@android:style/Theme.NoTitleBar". 隐藏状态栏:android:theme="@android:style/Theme.NoTitleBar.Fullscreen". ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?xml

Android实现宫格图片连续滑动效果

在这之前,写过几篇关于在Android中实现滑动的效果,毕竟滑动效果在Andriod开发中也使用得比较频繁,有兴趣的朋友请查看我以前的文章,这里不再详述. 今天写这篇文章的缘由是前一段时间一个网友在我的博客上面留言,想要实现在GridLayout(相当于九宫格)中点击每项可左右滑动显示该宫格的图片,当该宫格的图片显示完以后,接着显示下一宫格的图片.那么看过我以前关于滑动方面的文章的朋友,相信要实现前者的效果并不难,关键在于如何实现后者,即如何在一个宫格的图片显示完以后,接着显示下一宫格的图片.那

Android编程自定义title bar(标题栏)示例_Android

本文实例讲述了Android编程自定义title bar(标题栏)的方法.分享给大家供大家参考,具体如下: package com.test; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.Drawable; import andr