package com.pan.simplepicture.widget.scrollview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.animation.OvershootInterpolator;
import android.widget.LinearLayout;
import android.widget.Scroller;
public class OverScrollWarpLayout extends LinearLayout {
/**
* OvershootInterpolator�ĵ���ϵ��
*/
private static final float OVERSHOOT_TENSION = 0.75f;
/**
* ƽ��������
*/
private Scroller mScroller;
public OverScrollWarpLayout(Context context, AttributeSet attr) {
super(context, attr);
this.setOrientation(LinearLayout.VERTICAL);
// ��ʼ��ƽ��������
mScroller = new Scroller(getContext(), new OvershootInterpolator(OVERSHOOT_TENSION));
}
public OverScrollWarpLayout(Context context) {
super(context);
this.setOrientation(LinearLayout.VERTICAL);
// ��ʼ��ƽ��������
mScroller = new Scroller(getContext(), new OvershootInterpolator(OVERSHOOT_TENSION));
}
// ���ô˷���������Ŀ��λ��
public void smoothScrollTo(int fx, int fy) {
int dx = fx - mScroller.getFinalX();
int dy = fy - mScroller.getFinalY();
smoothScrollBy(dx, dy);
}
// ���ô˷������ù��������ƫ��
public void smoothScrollBy(int dx, int dy) {
// ����mScroller�Ĺ���ƫ����
mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy);
// ����������invalidate()���ܱ�֤computeScroll()�ᱻ���ã�����һ����ˢ�½��棬����������Ч��
invalidate();
}
@Override
public void computeScroll() {
// ���ж�mScroller�����Ƿ����
if (mScroller.computeScrollOffset()) {
// �������View��scrollTo()���ʵ�ʵĹ���
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
// ������ø÷���������һ���ܿ�������Ч��
postInvalidate();
}
super.computeScroll();
}
public final void smoothScrollToNormal() {
smoothScrollTo(0, 0);
}
public final int getScrollerCurrY() {
return mScroller.getCurrY();
}
}