用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
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
解决方案 »
- Android与PC的远程数据传输问题 【 恳求高手帮助】
- MediaRecorder录音暂停
- SharedPreference的CheckBoxPreference的不同效果
- android 录音播放出现的怪问题
- 求助:cannot be cast to java.io.Serializable
- Android 视图报: java.lang.NullPointerException Exception details are logged in ...
- 音频缓存机制
- android 新浪天气,根据地区无法获取天气的子节点
- 请教这种动画怎么做的?谢谢
- Google登录SDK 自带的登录按钮图标 怎么改 求大神
- android开发如何预置一些数据?
- 请问android如何在程序里关闭输入法
#include<iostream>
using namespace std;
void main(){
count<<"你是SB";
}