做5个滑动界面Android,揭秘Android界面水平滑动与竖直滑动实现

第二步,我们需要一个List之类的对象来帮我存放这些窗花纸,使我们能按顺序调用上一个或下一个View,这就是ViewFlipper对象。先声明一个ViewFlipper类的引用。

// 定义一个ViewFlipper对象的引用

privateViewFlipper myViewFlipper;

其次,我们将layout下main.xml里的标签换为标签。有人问为何要只留一个,因为不清空的话这些main里的内容会出现在其他View里,相当于你的窗户玻璃上有图案,那么贴上窗花纸后你看到就是窗花纸和玻璃上的图案的结合体。当然具体表现与这些内容和的前后关系有关,你可以自己试试!

="@+id/myViewFlipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

然后,用findViewById()方法进行注册。

// 绑定inflate控件,否则无法使用它

myViewFlipper = (ViewFlipper) findViewById(R.id.myViewFlipper);

好了,现在管理者有了,我们用myViewFlipper的addView()方法来往里面添加View实例。

// 用addView方法将生成的View对象加入到ViewFlipper对象中

myViewFlipper.addView(first);

myViewFlipper.addView(second);

myViewFlipper.addView(third);

现在,只要调用myViewFlipper的showPrevious()和showNext()方法就能显示前一个或后一个界面了。问题是,什么时候调用这两个方法?我们要实现的是触屏手势滑动,自然是在有滑动手势的时候,那么现在开始介绍第三步。

第三步,实例化GestureDetector对象,实现OnGestureListener接口,实现onFling()方法。

我们前面说了,要识别触屏手势,因此我们需要实例化一个GestureDetector(手势识别)对象。而这个对象的构造函数需要一个OnGestureListener作为参数,所以我们让MainActivity实现OnGestureListener接口,实现它的虚方法,然后在相关方法里调用showPrevious()和showNext()方法。

首先,定义GestureDetector引用。

// 定义一个GestureDetector(手势识别类)对象的引用

privateGestureDetector myGestureDetector;

然后,让MainActivity实现OnGestureListener接口,用Eclipse的自动补全功能完成它的虚方法。

publicclassMainActivityextendsActivityimplementsOnGestureListener{}

下一步,实例化GestureDetector对象。

// MainActivity继承了OnGestureListener接口

myGestureDetector =newGestureDetector(this);再下一步,让myViewFlipper能够处理长按操作。

// 设置识别长按手势,这样才能实现拖动

myViewFlipper.setLongClickable(true);

到此,基本配置完了,我们现在来做最重要的工作——将showPrevious()和showNext()方法放入OnGestureListener接口合适的方法里。

OnGestureListener接口里有很多方法,这里就不在赘述了,有兴趣的朋友去网上一查就能知道。我们需要处理的滑动是由onFling(MotionEvent e1,MotionEvent e2, float velocityX,float velocityY)方法完成的,它有四个参数,前两个是动作事件,后两个是滑动时的X轴Y轴的速度分量,这里用不到。

所谓水平滑动,就是按下时的横坐标与放开时的横坐标不同。因此我们从代表滑动开始与结束的e1和e2里取出滑动开始与结束时的横坐标比较判定,就能知道是左划还是右划,再调用showPrevious()和showNext()方法就可以了。

// 实现OnFling方法,就可以利用滑动的起始坐标识别出左右滑动的手势,并处理

publicbooleanonFling(MotionEvent e1, MotionEvent e2,floatvelocityX,

floatvelocityY) {

// 参数e1是按下事件,e2是放开事件,剩下两个是滑动的速度分量,这里用不到

// 按下时的横坐标大于放开时的横坐标,从右向左滑动

if(e1.getX() > e2.getX()) {

myViewFlipper.showNext();

}

// 按下时的横坐标小于放开时的横坐标,从左向右滑动

elseif(e1.getX() 

myViewFlipper.showPrevious();

}

returnfalse;

}

好了,现在主要代码已经完成,运行一下看看吧!

。。。   。。。    。。。(漫长的虚拟机启动,先去泡杯茶)

。。。   。。。(安装apk文件)

。。。(测试程序)

。。。what!不能滑动?别急,要的就是这个效果,如果现在能滑动了那就聊斋了。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值