android ViewFlipper滑屏问题

lingang1359 2011-07-01 10:49:10
用ViewFlipper做了个滑屏效果,同时仿照android.R.anim.slide_in_left和slide_out_right做了个slide_in_right和slide_out_left,目的就是想让用户在左往右滑的时候,图片从左边进,右边出,用户从右往左滑的时候,图片从右边进,左边出,但是做出来以后发现存在一个问题,如果是左滑一下,右滑一下,这样没问题,但是如果是左滑两下以上,再右滑的话,这时候图片还是按照左滑的效果执行的,不过图片显示没有问题,Java代码和动画XML如下,请教大神们,到底是啥问题……


public class MainActivity extends Activity {

private ViewFlipper vf;

GestureDetector gd;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


vf = (ViewFlipper) findViewById(R.id.myFlipper);

gd = new GestureDetector(new MyTouch());

vf.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gd.onTouchEvent(event);
}
});

vf.setLongClickable(true);
}

// 实现SimpleOnGestureListener接口来监听各种触摸事件
private class MyTouch extends SimpleOnGestureListener {

// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE,
// 1个ACTION_UP触发
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒

boolean flag = false;

// 触发条件 :
// X轴或者Y轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > 0) {
// Fling left
vf.showPrevious();

flag = true;


} else if (e2.getX() - e1.getX() > 0) {
// Fling right
vf.showNext();

flag = false;

}

if(flag){
// 设置切入动画
vf.setInAnimation(AnimationUtils.loadAnimation(
getApplicationContext(), R.anim.slide_in_right));
// 设置切出动画
vf.setOutAnimation(AnimationUtils.loadAnimation(
getApplicationContext(), R.anim.slide_out_left));
}else{
// 设置切入动画
vf.setInAnimation(AnimationUtils.loadAnimation(
getApplicationContext(), android.R.anim.slide_in_left));
// 设置切出动画
vf.setOutAnimation(AnimationUtils.loadAnimation(
getApplicationContext(), android.R.anim.slide_out_right));
}

return true;
}

}
}


图片右进左出的动画效果:
slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0" android:duration="200"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="200" />
</set>


slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p" android:duration="200"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="200" />
</set>


图片左进右出用的是系统自带的android.R.anim.slide_in_left和android.R.anim.slide_out_right
...全文
2267 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
霸气的小蜜蜂 2013-03-22
  • 打赏
  • 举报
回复
你好,谢谢你,这个对我有用,我看了你的代码,如果真的要实现左右滑,你将动画代码加入到show()之前,就可以了,我这边就是!
startFromWeb 2012-02-13
  • 打赏
  • 举报
回复
<a href="www.baidu.com">百度</a>
startFromWeb 2012-02-13
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
void main(){
count<<"你是SB";
}
ch_984326013 2011-08-21
  • 打赏
  • 举报
回复
http://blog.csdn.net/ch_984326013/article/details/6702958
chenhaigang888 2011-08-20
  • 打赏
  • 举报
回复
我也正在学习这个内容 麻烦楼主把你的这个工程发我邮箱里一下 。我的email:chenhaigang888@163.com
louhl1234 2011-08-11
  • 打赏
  • 举报
回复
楼主能把你做的工程发我一下吗?我急需阿,谢谢。我的邮箱是louhongliang@sina.cn
haiwanghappy 2011-08-03
  • 打赏
  • 举报
回复
看看啊,正在接触。
sll_docking 2011-07-25
  • 打赏
  • 举报
回复
路过,学习
Hilda_Chen 2011-07-12
  • 打赏
  • 举报
回复
将vf.setInAnimation, vf.setOutAnimation放在对应的vf.showPrevious(), vf.showNext()之前。

80,337

社区成员

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

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