Android ScrollView 滑动实现标题栏渐变背景色
在 Android 应用开发中,顶部导航栏或标题栏随着页面滚动产生颜色渐变效果是一种常见且优雅的 UI 交互设计。这种设计通常用于列表页(List Page),当用户向上滑动时,标题栏从透明逐渐变为实色,增强视觉层次感。
本文将详细介绍如何通过自定义 ScrollView 监听滚动事件,结合透明度计算,实现标题栏背景色的平滑渐变效果。内容涵盖核心类编写、Activity 逻辑处理、布局配置以及注意事项。
一、核心原理
实现该效果的核心在于获取 ScrollView 的垂直滚动距离(Y 轴偏移量),并根据该距离与顶部图片高度的比例,动态计算背景颜色的 Alpha 通道值。
- 监听滚动:标准 ScrollView 不直接提供滚动监听接口,需继承并重写
onScrollChanged方法。 - 高度测量:获取顶部图片(Header Image)的高度,作为渐变的基准高度。
- 颜色插值:
- 当滚动距离 Y <= 0 时,背景完全透明。
- 当 0 < Y <= HeaderHeight 时,Alpha 值随 Y 线性增加。
- 当 Y > HeaderHeight 时,背景完全不透明。
二、核心类实现 (ObservableScrollView)
我们需要一个能够暴露滚动事件的自定义 ScrollView 控件。
package com.example.titlebarcolor;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;
/**
* 带滚动监听的 ScrollView
*/
public class ObservableScrollView extends ScrollView {
public interface ScrollViewListener {
void onScrollChanged(ObservableScrollView scrollView, int x, int y,
int oldx, int oldy);
}
private ScrollViewListener scrollViewListener = null;
public ObservableScrollView(Context context) {
super(context);
}
{
(context, attrs);
}
{
(context, attrs, defStyle);
}
{
.scrollViewListener = scrollViewListener;
}
{
.onScrollChanged(x, y, oldx, oldy);
(scrollViewListener != ) {
scrollViewListener.onScrollChanged(, x, y, oldx, oldy);
}
}
}


