`

弹性 ScrollView

 
阅读更多
CustomerScrollView.java:
class CustomerScrollView extends ScrollView {

	private Context mContext;
	private View mView;
	private Rect mRect = new Rect();
	private float y;

	public CustomerScrollView(Context context) {
		super(context);
		this.mContext = context;
	}

	public CustomerScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.mContext = context;
	}

	public CustomerScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.mContext = context;
	}

	@Override
	protected void onFinishInflate() {
		if (getChildCount() > 0) {
			this.mView = getChildAt(0);
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		if (mView == null) {
			return super.onTouchEvent(ev);
		} else {
			commOnTouchEvent(ev);
		}
		return super.onTouchEvent(ev);
	}

	private void commOnTouchEvent(MotionEvent ev) {
		int action = ev.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			y = ev.getY();
			break;
		case MotionEvent.ACTION_UP:
			if (isNeedAnimation()) {
				animation();
			}
			break;
		case MotionEvent.ACTION_MOVE:
			final float preY = y;
			float nowY = ev.getY();
			int deltaY = (int) (preY - nowY);
			scrollBy(0, deltaY);
			y = nowY;
			if (isNeedMove()) {
				if (mRect.isEmpty()) {
					mRect.set(mView.getLeft(), mView.getTop(),
							mView.getRight(), mView.getBottom());
				}
				if (mView.getTop() - deltaY < 200
						&& mView.getTop() - deltaY > -200) {
					mView.layout(mView.getLeft(), mView.getTop() - deltaY,
							mView.getRight(), mView.getBottom() - deltaY);
				}
			}
			break;
		default:
			break;
		}
	}

	private boolean isNeedMove() {
		int offset = mView.getMeasuredHeight() - getHeight();
		int scrollY = getScrollY();
		if (scrollY == 0 || scrollY == offset) {
			return true;
		}
		return false;
	}

	private boolean isNeedAnimation() {
		return !mRect.isEmpty();
	}

	private void animation() {
		TranslateAnimation ta = new TranslateAnimation(0, 0, mView.getTop(),
				mRect.top);
		ta.setDuration(200);
		mView.startAnimation(ta);
		mView.layout(mRect.left, mRect.top, mRect.right, mRect.bottom);
		mRect.setEmpty();

	}
}
分享到:
评论

相关推荐

    弹性ScrollView

    弹性ScrollView是一种自定义的滚动视图,主要用于在Android开发中实现具有弹性效果的滚动功能。在Android原生的ScrollView中,我们无法直接实现类似于橡皮筋拉伸效果的滚动,而弹性ScrollView则提供了这种功能,增加...

    仿IOS弹性ScrollView

    在Android开发中,为了提供与iOS类似的用户体验,开发者经常需要实现一些特定的界面效果,比如“仿iOS弹性ScrollView”。这个专题主要关注如何在Android平台上创建一个具有弹性滚动特性的ScrollView,使得用户在上下...

    自定义弹性scrollviewDemo

    本文将深入探讨如何基于`ScrollView`创建一个具有弹性效果的自定义组件,即“自定义弹性scrollviewDemo”。该组件实现了下拉弹回和上拉弹回的功能,与下拉刷新的效果类似,但更具趣味性和交互性。 首先,我们需要...

    Android 弹性ScrollView和悬浮头.zip

    这个名为"Android 弹性ScrollView和悬浮头"的压缩包文件正专注于解决这一问题,它提供了源码示例和相关说明,帮助开发者在Android应用中实现类似于iOS的弹性滚动效果和浮动头部功能。 首先,我们来理解一下"弹性...

    安卓Setting[弹性ScrollView]Demo

    在Android开发中,"安卓Setting[弹性ScrollView]Demo"是一个示例项目,它展示了如何在设置界面中实现一个具有弹性的ScrollView。ScrollView是Android的一种布局容器,它允许用户滚动其内容,当内容超过屏幕大小时...

    自定义拉到顶部和底部具有弹性ScrollView,支持下拉上拉弹性

    自定义拉到顶部和底部具有弹性ScrollView,支持下拉上拉弹性

    reactnativespringscrollview是JavaScript实现的一组高性能弹性ScrollView家族

    react-native-spring-scrollview 是JavaScript实现的一组高性能弹性ScrollView家族,使用它可以轻松地实现iOS风格的下拉刷新及上拉加载更多,拥有完全一致的视图表现及原生的弹性体验,并且兼容iOS和Android。

    自定义拉到顶部和底部具有弹性ScrollView

    自定义拉到顶部和底部具有弹性ScrollView

    android 能上下弹性拉动的ScrollView

    在压缩包中的"android_scoll"文件很可能是这个示例项目的源代码,包含了实现弹性ScrollView所需的布局文件、Java代码和其他资源。开发者可以通过查看这些文件,学习如何自定义ScrollView并实现弹性效果。 总的来说...

    android 仿ios 弹性ScrollView 上下滑动

    将文件复制到工程中,将包名改为自己项目的包名即可!简单好用

    带弹性的ScrollView效果

    使用XListView做出的弹性ScrollView效果,代码虽然有点变态,但是和iOs的弹性效果非常接近,是目前遇到过最好的弹性效果,看到咕咚运动是这样的效果,估计就是这样干出来的吧,倒是有点曲线救国的意思了,有兴趣的...

    有弹性的ScrollView

    有弹性的ScrollView.

    弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo

    本文将深入探讨如何实现“弹性拉伸”的ScrollView、在ScrollView中嵌套ListView以及添加ScrollView的滑动监听。这些技巧在创建复杂的用户界面时非常实用。 首先,让我们谈谈“弹性拉伸”效果的ScrollView。这种效果...

    基于as3的Flash ScrollPanel动画实例集.rar

    基于as3的Flash ScrollPanel动画实例集,Flash的版本问题另人头痛啊,Flash CS4打的有的文件会出错,不知Macromedia公司卖给了Adobe后,还是不能解决版本不兼容的问题,好烦人的Flash。

    有弹性的ScrollView 实现下拉弹回和上拉弹回

    有弹性的ScrollView 实现下拉弹回和上拉弹回,可直接使用

    有弹性的ScrollView&ListView&HorizontalScrollView

    这篇博文“有弹性的ScrollView&ListView&HorizontalScrollView”似乎探讨了如何为这些视图添加弹性效果,使滚动体验更加流畅和有趣。弹性滚动效果通常是通过模拟物理世界的回弹效果来实现的,它能让用户在到达视图...

    android ScrollView弹性控件,横向和纵向滑动

    然而,标准的ScrollView并不支持弹性滑动效果,即在滑动到边界时产生回弹的效果。这通常是通过第三方库或者自定义控件来实现的,比如我们这里提到的"ReboundScrollView"。 ReboundScrollView是一个仿照Facebook开源...

    ScrollView

    5. **bounce**:此属性控制 ScrollView 是否具有弹性效果。当 `bounce` 设置为 `true` 时,用户滚动到内容的边缘时,ScrollView 会有一个回弹效果。 6. **scrollEvent**:你可以监听 `scroll` 事件来获取用户滚动时...

Global site tag (gtag.js) - Google Analytics