第四步,实现OnTouchListener接口和onTouch()方法。
现在我来解释下为何不能滑动,因为当发生触屏事件时,Android系统没有直接调用myGestureDetector和OnGestureListener里的方法,也不可能把MotionEvent类型的参数传递给onFling()函数。因此,按照前面的思路我们下面还需让myGestureDetector中的方法被调用,并获得参数。
为此,我们需要实现OnTouchListener接口和onTouch()方法,因为当一个View上发生触摸事件,android系统会调用的这个方法,并传递给它MotionEvent对象作为参数。
publicclassMainActivityextendsActivityimplementsOnGestureListener, OnTouchListener {}然后,对myViewFlipper设置触屏事件监听器。
// MainActivity继承了OnTouchListener接口
myViewFlipper.setOnTouchListener(this);
现在是伟大工程的最后一步啦,欢呼吧。我们实现onTouch()方法,在里面调用myGestureDetector对象的onTouchEvent()方法,并把MotionEvent类型参数event传递进去,这样我们的手势识别方法就能处理现在的触屏手势啦。
/*
* 实现OnTouchListener接口中的onTouch()方法,当View上发生触屏时间时调用,传如一个View和一个运动事件event,我们将
* 这个event传给OnGestureListener接口的onTouchEvent()方法处理,这样我们的OnFling()就能工作了
*/
publicbooleanonTouch(View v, MotionEvent event) {
returnmyGestureDetector.onTouchEvent(event);
}
好了,现在你可以再次运行程序看看效果了,我不会再抖包袱了。
啰啰嗦嗦写了那么多,想必大家对整个功能的实现过程,需要的类、接口与方法,以及它们的功能都有一个了解了吧。
我们还有两个较简单的功能要实现,请继续往下看。
一个Activity对应多个View时的空间注册
当我们只有一个View对应一个Activity时,View里的控件注册自然在这个Activity里完成,现在多个View对应一个Activity,又该如何注册呢?我们别忘了Activity是管家的角色,这些工作自然还是给这个它完成。我在代码里已经给每个View里的Button控件完成了注册,按下Button后可以显示一个Toast,因为太简单这里就不浪费笔墨了,有兴趣的朋友可以下载源代码来研究。
最后是屏幕竖直滑动的实现。
比起水平滑动它实在太简单了,因为android直接提供了一种View来处理,我们直接在layout文件里使用标签就可以了。需要注意的是,ScrollView下只能包含一个子元素,因此如果你的ScrollView下有多个View控件,请像我一样用个属于ViewGroup的Layout将它们包起来,再将这个Layout放入ScrollView标签中。
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:text="这是第三个View,也是一个ScrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:id="@+id/thiedButton"
android:text="第三个View上的提示"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Ok,所有要介绍的知识点都介绍完了,���望这些知识对大家有用。真正的编程中的界面滑动效果可能比这个复杂,希望大家坚信android是强大的,拿出锲而不舍的精神克服这些困难。