GestureDetector 的问题,各位帮忙看看

太久 2011-10-18 02:09:19
【描述1】想用ViewFlipper做一个横向滚动的效果,每次在ViewFlipper滑动时滚动一个屏幕。在ViewFlipper之外还有个TextView。布局大致如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
<TextView android:text="My course" ></TextView>
<ViewFlipper>
<LinearLayout>
<TextView android:text="11111"></TextView>
</LinearLayout>
<LinearLayout>
<TextView android:text="22222"></TextView>
</LinearLayout>
<LinearLayout>
<TextView android:text="33333"></TextView>
</LinearLayout>
</ViewFlipper>
</LinearLayout>


我先试着对ViewFlipper绑定了OnTouchListener,在onTouch(View v, MotionEvent touchevent)中分别判断MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE 的touchevent.getX()。但是一点击就直接触发了翻页动作,如下:

vf = (ViewFlipper) findViewById(R.id.layoutswitcher);
vf.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent touchevent) {
Log.e("touchevent", String.valueOf(touchevent.getAction()));
switch (touchevent.getAction())
{

case MotionEvent.ACTION_DOWN:
{
oldTouchValue = touchevent.getX();
break;
}
case MotionEvent.ACTION_MOVE:
{

float currentX = touchevent.getX();
Log.e("touchevent", String.valueOf(oldTouchValue)+" - "+String.valueOf(currentX));
if(currentX>oldTouchValue){
vf.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(),R.anim.push_right_in));
vf.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(),R.anim.push_left_out));
vf.showNext();
}
else {
vf.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(),R.anim.push_left_in));
vf.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(),R.anim.push_right_out));
vf.showPrevious();
}
break;
}
}
return true;
}
});


【问题1】:如何判断是一个滑动的状态呢?

【描述2】之后,看了下api,用activity实现了OnGestureListener接口,并重写了activity.onTouchEvent()方法,实现了手指在屏幕上滑动后切换屏幕,但问题是,不光在ViewFlipper范围内滑动会翻页,在整个可视范围内都可以(比如,在布局文件范围内滑动也会翻页)。代码大致如下:

public class MyCourse extends Activity implements OnGestureListener {

private GestureDetector detector;
protected void onCreate(Bundle savedInstanceState) {
detector = new GestureDetector(getApplicationContext(),this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.detector.onTouchEvent(event);
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() > e2.getX()) {
this.vf.showNext();
} else if (e1.getX() < e2.getX()) {
this.vf.showPrevious();
} else {
return false;
}
return true;
}
}

【问题2】如何实现只在ViewFlipper范围内的滑动才会翻页的效果?
...全文
48 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
太久 2011-10-18
  • 打赏
  • 举报
回复
嗯,反应过来了,谢楼上咯。
花时间发帖子不如多想想啊。。人懒。。
结贴
oyq_yangy 2011-10-18
  • 打赏
  • 举报
回复
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.detector.onTouchEvent(event);
}

那就不应该在Activity的onTouchEvent里detector.onTouchEvent(event);
应该是ViewFlipper的onTouchEvent里detector.onTouchEvent(event);
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧