private OnScrollChangedListener scrollListener = new OnScrollChangedListener() {
@Override
public void onScrollChanged(ListView who, int left, int top, int oldl, int oldt) {
int lHeight = 400;
if (mY <= lHeight) {
int progress = (int) (new Float(mY) / new Float(lHeight) * 255);
headerView.getBackground().setAlpha(progress);
if (mY <= 10) {
headerView.getBackground().setAlpha(0);
}
} else {
headerView.getBackground().setAlpha(255);
}
}
};
int mY;
OnScrollListener scrollListener2 = new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mY = getScrollY();
}
};
public int getScrollY() {//获取滚动距离
View c = productListView.getChildAt(0);
if (c == null) {
return 0;
}
int firstVisiblePosition = productListView.getFirstVisiblePosition();
int top = c.getTop();
int headerHeight = 0;
if (firstVisiblePosition >= 1) {
headerHeight = productListView.getHeight();
}
return -top + firstVisiblePosition * c.getHeight() + headerHeight;
}
自定义Listview
package com.mas.wonderbuy.ui.view.fadingheaderscrollview;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ListView;
import android.widget.ScrollView;
/***
*
* @ClassName: CustomFadingHeaderScrollView
* @Description: 随着Scrollview的滚动,隐藏自定义的HeaderView
* @author jinhuan.li
* @date 2015-12-2 下午4:50:10
*
*/
public class CustomFadingHeaderListView extends ListView {
//是否允许渐变
private boolean isEdgeEffect = true;
private OnScrollChangedListener mOnScrollChangedListener;
public CustomFadingHeaderListView(Context context) {
super(context);
}
public CustomFadingHeaderListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomFadingHeaderListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public interface OnScrollChangedListener {
void onScrollChanged(ListView who, int left, int top, int oldl, int oldt);
}
@Override
protected void onScrollChanged(int l, int t, int oldLeft, int oldTop) {
super.onScrollChanged(l, t, oldLeft, oldTop);
if (mOnScrollChangedListener != null) {
mOnScrollChangedListener.onScrollChanged(this, l, t, oldLeft, oldTop);
}
}
/***
*
* @Title: setOnScrollChangedListener
* @Description: TODO
* @param @param listener
* @return void
* @author jinhuan.li
*/
public void setOnScrollChangedListener(OnScrollChangedListener listener) {
mOnScrollChangedListener = listener;
}
/***
* 返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间
* 滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
*/
@Override
protected float getTopFadingEdgeStrength() {
if (isEdgeEffect && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 0.0f;
}
return super.getTopFadingEdgeStrength();
}
/**
* 同上
*/
@Override
protected float getBottomFadingEdgeStrength() {
if (isEdgeEffect && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 0.0f;
}
return super.getBottomFadingEdgeStrength();
}
}
同理 Scollview时的做法。
package com.mas.wonderbuy.ui.view.fadingheaderscrollview;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.ScrollView;
/***
*
* @ClassName: CustomFadingHeaderScrollView
* @Description: 随着Scrollview的滚动,隐藏自定义的HeaderView
* @author jinhuan.li
* @date 2015-12-2 下午4:50:10
*
*/
public class CustomFadingHeaderScrollView extends ScrollView {
//是否允许渐变
private boolean isEdgeEffect = true;
private OnScrollChangedListener mOnScrollChangedListener;
public CustomFadingHeaderScrollView(Context context) {
super(context);
}
public CustomFadingHeaderScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomFadingHeaderScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public interface OnScrollChangedListener {
void onScrollChanged(ScrollView who, int left, int top, int oldl, int oldt);
}
@Override
protected void onScrollChanged(int l, int t, int oldLeft, int oldTop) {
super.onScrollChanged(l, t, oldLeft, oldTop);
if (mOnScrollChangedListener != null) {
mOnScrollChangedListener.onScrollChanged(this, l, t, oldLeft, oldTop);
}
}
/***
*
* @Title: setOnScrollChangedListener
* @Description: TODO
* @param @param listener
* @return void
* @author jinhuan.li
*/
public void setOnScrollChangedListener(OnScrollChangedListener listener) {
mOnScrollChangedListener = listener;
}
/***
* 返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间
* 滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
*/
@Override
protected float getTopFadingEdgeStrength() {
if (isEdgeEffect && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 0.0f;
}
return super.getTopFadingEdgeStrength();
}
/**
* 同上
*/
@Override
protected float getBottomFadingEdgeStrength() {
if (isEdgeEffect && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 1.0f;
}
return super.getBottomFadingEdgeStrength();
}
}