想把最近做项目学会的东西整理一下,项目中有一个要求,就是实现ScrollView滑动时标题栏的隐藏效果,整体效果是ScrollView从头往下滑动的时候慢慢的隐藏标题栏的效果
注意:我的标题栏是自己写的布局,并不是运用actionbar或者相关替代控件写的.
先看效果图吧:
思路:
1.监听ScrollView的滑动变化事件,但是我们会发现ScrollView并没有对外提供这个方法,所以我们要做的操作就是实现对外公布这个方法
2.实现标题栏的动画,其实就是改变相对应的透明度而已。
代码:
我们先自定义一个ScrollView,注释说明很清楚,就不想详细介绍了:
public class MyScrollView extends ScrollView{
private ScrollViewListener scrollViewListener = null;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
//x为当前滑动条的横坐标,y表示当前滑动条的纵坐标,oldx为前一次滑动的横坐标,oldy表示前一次滑动的纵坐标
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
//在这里将方法暴露出去
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
//是否要其弹性滑动
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
int scrollY, int scrollRangeX, int scrollRangeY,
int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
// 弹性滑动关键则是maxOverScrollX, 以及maxOverScrollY,
// 一般默认值都是0,需要弹性时,更改其值即可
// 即就是,为零则不会发生弹性,不为零(>0,负数未测试)则会滑动到其值的位置
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,
scrollRangeY, 0, 0, isTouchEvent);
}
//接口
public interface ScrollViewListener {
void onScrollChanged(View scrollView, int x, int y, int oldx, int oldy);
}
public void setScrollViewListener(ScrollViewListener listener)
{
scrollViewListener=listener;
}
}
接着我们只需要使用这个自定义控件,获取监听事件就好了
mScrollView.setScrollViewListener(new MyScrollView.ScrollViewListener() {
@Override
public void onScrollChanged(View scrollView, int x, int y, int oldx, int oldy) {
if (isFirst) {
isFirst = false;
}
titleAnim(oldy,y);
}
});
最后就只需要获取标题栏对象,通过判断scrollView的滑动距离进行相对应的变化即可:
if (y < 800) {
float alpha = 1 - ((float) y) / 800;
BaseActvity.titleBar.setAlpha(alpha);
if (alpha==0)
{
BaseActvity.titleBar.setClickable(false);
}else
{
BaseActvity.titleBar.setClickable(true);
}
} else {
//下滑显示标题栏
if (oldy > y) {
BaseActvity.titleBar.setAlpha(1);
BaseActvity.titleBar.setClickable(true);
} else {
BaseActvity.titleBar.setAlpha(0);
BaseActvity.titleBar.setClickable(false);
}
}
}
http://blog.csdn.net/anny_lin/article/details/49722361
我自己写的例子,和上面效果相反(上划显示,下划消失)
源码下载:
http://download.csdn.net/detail/zhaihaohao1/9524904