android 上下平滑翻页



今天工作有点忙,就先贴上源码,有时间了再详细说明吧。

可以完整执行的上下翻页源码被我上传至资源页:http://download.csdn.net/detail/fener10289/6284691

主要实现上下滑动翻页的自定义控件代码:

package com.example.flingpage; 
  
  
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.VelocityTracker; 
import android.view.View; 
import android.view.ViewConfiguration; 
import android.view.ViewGroup; 
import android.view.View.MeasureSpec; 
import android.widget.Scroller; 
  
/** 
* 自定义一个ScrollView实现屏幕的上下滑动 
*/
public class DefinedScrollView extends ViewGroup { 
	// 用来平滑过渡各个页面之间的切换,需要进行平滑的滚动,就要重写其ComputeScroll方法 
	private Scroller mScroller; 
	// 用来检测用户的手势,或者也可用GestureDetector 
	private VelocityTracker mVelocityTracker; 
	  
	// 当前的屏幕索引 
	private int mCurrentScreen; 
	// 翻屏的页数 
	//private int mPage = 0; 
	// 默认的屏幕索引 
	private int mDefaultScreen = 0; 
	  
	// 屏幕闲置时 
	private static final int TOUCH_STATE_REST = 0; 
	// 屏幕滚动时 
	private static final int TOUCH_STATE_SCROLLING = 1; 
	  
	// 滚动速度 
	private static final int SNAP_VELOCITY = 600; 
	// 触屏状态为当前屏幕闲置 
	private int mTouchState = TOUCH_STATE_REST; 
	  
	// 触屏溢出 
	private int mTouchSlop; 
/*	// 最后的横向手势坐标 
	private float mLastMotionX; */
	// 最后的纵向手势坐标 
	private float mLastMotionY; 
	  
	private PageListener pageListener; 
  
	/** 
	* 在构造方法中初始化各个状态 
	*  
	* @param context 
	* @param attrs 
	* @param defStyle 
	* ScrollView的默认样式 
	*/
	public DefinedScrollView(Context context, AttributeSet attrs, int defStyle) { 
		super(context, attrs, defStyle); 
		mScroller = new Scroller(context); 
		// 当前屏幕即为默认的屏幕,即为第一屏 
		mCurrentScreen = mDefaultScreen; 
		// 是一个距离,表示滑动的时候,手的移动要大于这个距离才开始移动控件 
		mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); 
	} 
  
	public DefinedScrollView(Context context, AttributeSet attrs) { 
	// 0表示没有风格 
		this(context, attrs, 0); 
	} 
  
	/** 
	* 横向画出每一个子view,这样所得到的view的高与屏幕高一致,宽度为getChildCount()-1个屏幕宽度的view。 
	*/
	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b) { 
		///int childLeft = 0; 
		int childTop = 0;
		int childCount = getChildCount(); 
		for (int i = 0; i &l
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值