获取Listview滑动距离

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();
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值