自设标题栏随着布局向上滚动实现透明渐变

原创 2015年11月21日 14:37:07

有些时候,安卓要向IOS一样,将安卓自己的actionbar隐藏自设一个标题栏,而且有时需求又要将这个自设的标题栏实现内容滚动后能够跟着透明渐变。我在百度搜索了一大堆废话文章后,找了一个类似的功能改造成自己需求的效果。demo实现的简陋,见谅!

首先我们看看布局,非常简单:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/ma_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:divider="@android:color/black"
        android:dividerHeight="0.5dp"
        android:cacheColorHint="@android:color/transparent"
        android:headerDividersEnabled="false"
        android:footerDividersEnabled="false"
        android:listSelector="@android:color/transparent" >
    </ListView>

    <LinearLayout
        android:id="@+id/title_view"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#E42F47"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tt_t1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center"
            android:text="《《《"
            android:textSize="18sp"
            android:layout_margin="10dp"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/tt_t2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Test_Title"
            android:gravity="center"
            android:textSize="16sp"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>
</FrameLayout>

其中,id为title_view的LinearLayout即是自设的一个标题栏,我们要实现的就是随着listview的滚动,它能够跟着透明渐变。


那么开始!首先findViewById找出标题栏和listview,然后listview去setAdapter(),重点来了,给listview实现setOnScrollListener的监听事件。我们的思路就是通过获取被监听的控件即listview的第一个item的顶点(top)所在的位置,用它所在顶点的相反值(为什么要相反值?因为获取的这个值往往是个负数,需要取反)去被标题栏控件的高度除,得出一个float的值作为透明的百分比,实时设置标题栏的透明度变化。同时要注意,只有listview第一个item在标题栏周围时才去实现透明渐变。


关键代码在此:


OnScrollListener scrolListener = new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 判断当前最上面显示的是不是头布局
if(firstVisibleItem == 0) {
if(title != null) {
View head_child = view.getChildAt(0);
if(head_child!=null) {
int top = -head_child.getTop();
// 获取头布局的高度
int height = title.getHeight();
// 满足这个条件的时候,只有这个时候,我们才调整透明度
if (top <= height && top >= 0) {
// 获取当前位置占头布局高度的百分比
float alpha = (float)top/(float)height;
title.getBackground().setAlpha((int) (alpha * 255));
// 通知标题栏刷新显示
title.invalidate();
}
}
}
}else if(firstVisibleItem > 0) {
title.getBackground().setAlpha(255);
}else {
title.getBackground().setAlpha(0);
}
}
};


demo地址在这里:

http://download.csdn.net/detail/u014436704/9284861

相关文章推荐

Android渐变标题栏的实现

Android4.4以上推出了Toolbar,改变程序的style属性就可以给手机的标题栏填充颜色,可以是你设置好的系统的主题色,也可以是自己填充的颜色,其实这个效果在iOS早就有了,在iOS中,最常...

ScrollView滑动实现标题栏透明度随之渐变

我们在使用Scroview滑动的过程中有可能需要通过测量滑动了多少来动态修改某个空间的颜色 实现效果如图所示 期初状态栏颜色为透明色,随着Scroview向下互动的过程中状态栏的颜色随之慢慢变成白...

ListView+TitleBar实现滚动ListView时TitleBar的透明度随之变化

ListView+TitleBar实现滚动ListView时TitleBar的透明度随之变化。 越来越多的应用用到这种效果,自己动手写了写,希望和大家互相交流学习,不足之处还请不吝赐教。 ...

Android:Listview背景设置为透明

在android开发中,listview的默认背景颜色是黑色的,所以在UI设计中,肯定会对它进行美化处理,尤其是在游戏开发中。最近在做用户聊天框的时候遇到一个这样的问题,我把显示用户聊天记录的list...

ListView滑动使得标题栏背景渐变(透明-不透明)

ListView滑动使得标题栏背景渐变(透明-不透明)

Android实现QQ空间沉浸式状态栏,并且滑动ListView实现透明度变化

安卓4.4以后增加了可以改变状态蓝颜色的api,所以现在主流的APP基本上都会把状态栏修改成自己APP的主题颜色。那么接下来就先实现沉浸式状态栏吧,//透明状态栏 getWindow().a...

关于listView item区分状态时设置标题颜色,滑动时全部颜色修改的BUG解决方法

今天在写程序时遇到一个问题,产品经理要求,在某种状态下,改变LIstView的item标题颜色,但是更改完状态之后,随着listView的滑动,所有Item的颜色都会随之改变,修改了很多地方都没有作用...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

android标题栏颜色渐变效果的实现(标题栏随着scrollview的滚动而变化)

之前也是在网上看到这种效果,不过是滚动listview来改变标题栏的颜色,感觉那个应用的比较少,比如我要滚动scrollview来实现呢,那么问题就来了,废话少说,看一下要实现的效果先(这是在项目应用...

android Recyclerview仿京东,滚动屏幕标题栏渐变

Recyclerview实现标题栏渐变和上拉下拉刷新。如果需要listview,等其他控件,需实现onScrollListener,在onscroll中嵌入渐变代码。...
  • jdsjlzx
  • jdsjlzx
  • 2015年11月21日 17:23
  • 18777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自设标题栏随着布局向上滚动实现透明渐变
举报原因:
原因补充:

(最多只允许输入30个字)