实现view滑动的功能在自定义的ScrollLayout类中实现。该类是一个自定义view,它本身和LinearLayout、ScrollView等等view有异曲同工之妙,就像LinearLayout它能帮助我们把我们包装在里面的控件排列成线性布局,我们自己编写的ScrollLayout能够帮助我们实现屏幕滑屏的效果。
ScrollLayout extendsGroupView
步骤:先把所有的子view的大小都找好,然后为他们分配好位置
之后根据手指的手势判断手势的速度还有移动距离来确定将要移动到哪个curScreen,最后把界面显示成我们的destScreen就OK了。
源码:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<com.crte.scrolllayout.ScrollLyout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffedfa" >
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ceb452" >
</LinearLayout>
</com.crte.scrolllayout.ScrollLyout>
ScrollLayout类:
package com.crte.scrolllayout;
import android.app.Activity;
public class ScrollLyout extends ViewGroup {// Terase_ScrollLyoutDemoActivity
private static final String TAG = "terase_ScrollLayout";
private Scroller mScroller;
private VelocityTracker mVelocityTracker;
private int mCurScreen;
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; /