先说下需求“当列表滑动时,背景透明度随着上或下滑动而改变透明度”,那我们思考下,既然是滚动事件,一般是利用的实现onScrollListener接口,同时监听滑动的具体位置来动态改变标题背景透明度。有些骚年可能不知道怎么初始化时动态设置布局背景透明度,看下面:
//设置你需要初始化透明度的布局,Alpha值0-255
方法“.getBackground().setAlpha(0);”
再看实现onScrollListener接口的两个方法:
- [java] view plain copy @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch(scrollState){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://空闲状态 break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING://滚动状态 break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://触摸后滚动 break; }
}
private int headerHeight = 0;
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
View sview = xListView.getChildAt(0);
if(null != sview) {
int top = -(sview.getTop());
headerHeight = sview.getHeight()-270;
if (top > 0 && top <= headerHeight && firstVisibleItem==1) {
float scale = (float) top / headerHeight;
float alpha = (255 * scale);
rlTitle.getBackground().setAlpha((int)alpha);
}else if(top == 0){
rlTitle.getBackground().setAlpha(0);
}else if(firstVisibleItem > 1){
rlTitle.getBackground().setAlpha(255);
}
}
}
这里我们以XListView为背景下实现的滚动监听,xListView.setOnScrollListener()。实现的方法里,主要是针对onScroll()进行进行的事件封装。
首先看xListView.getChildAt(0),获取第一项Item或Header的View,然后分别获取top 和headerHeight两个值,getTop()获取的是当下Item所滑动的距离,本身为负值,headerHeight是当下Item的高度,我这里进行了微调-270,为了达到所要求的高度而已。
其次是一些IF语句判断,重点是第一个IF判断内容。我们设置背景Alpha,肯定要获取当下滑动距离占据当下Item高度的比例,然后根据比例算出所需设置的Alpha。只是一道数学算法,并没什么难得。
原文:http://blog.csdn.net/crazywolfteam