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

有些时候,安卓要向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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值