GestureDetector 的问题,各位帮忙看看

太久 太久 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
【描述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范围内的滑动才会翻页的效果?
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
太久
Android 80,490 成员 91,375 内容