package com.example.imageswitch;


import android.os.Bundle;
import android.app.Activity;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;


/**
 * android onTouchEvent 左右手势滑动事件处理 要实现手指在屏幕上左右滑动的事件需要实例化对象GestureDetector,new
 * GestureDetector(MainActivity.this,onGestureListener);
 * 首先实现监听对象GestureDetector.
 * OnGestureListener,根据x或y轴前后变化坐标来判断是左滑动还是右滑动并根据不同手势滑动做出事件处理doResult(int
 * action),
 * 然后覆写onTouchEvent方法,在onTouchEvent方法中将event对象传给gestureDetector.onTouchEvent
 * (event);处理。
 * 
 * @author Administrator
 * 
 */
public class MainActivity extends Activity implements ViewFactory {
private ImageSwitcher imageSwitcher;


final int RIGHT = 0;
final int LEFT = 1;
private GestureDetector gestureDetector;


// 存放图片的资源ID
private int[] images = { R.drawable.a1, R.drawable.a2, R.drawable.a3 };
private int index;// 记录当前图片的下标


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gestureDetector = new GestureDetector(MainActivity.this,
onGestureListener);
imageSwitcher = (ImageSwitcher) findViewById(R.id.iamgeswitch1);


imageSwitcher.setFactory(this);// 设置切换View对象
imageSwitcher.setImageResource(images[0]);// 设置第一张图片
}


/**
* SimpleOnGestureListener类是GestureDetector提供给我们的一个更方便的响应不同手势的类,这个类实现了上述两个接口(但是所有的方法体都是空的)
* 该类是static class,也就是说它实际上是一个外部类。程序员可以在外部继承这个类,重写里面的手势处理方法。
*/
private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float x = e2.getX() - e1.getX();
float y = e2.getY() - e1.getY();


if (x > 0) {
doResult(RIGHT);
} else if (x < 0) {
doResult(LEFT);
}
return true;
}
};


public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}


public void doResult(int action) {


switch (action) {
case RIGHT:
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.left_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.right_out));
index--;
if (index < 0) {
index = 0;// 依旧显示最后一张图片
return;
}


imageSwitcher.setImageResource(images[index]);
break;


case LEFT:
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.right_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.left_out));
index++;
if (index >= images.length) {
index = images.length - 1;// 依旧显示最后一张图片
return;
}
imageSwitcher.setImageResource(images[index]);
break;


}
}


@Override
public View makeView() {
ImageView imageView = new ImageView(this);
return imageView;
}

}




其中:

left_in.xml

<?xml version="1.0" encoding="UTF-8"?>



            android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />




left_out.xml

<?xml version="1.0" encoding="UTF-8"?>



            android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />


right_in.xml

<?xml version="1.0" encoding="UTF-8"?>



            android:duration="500"
        android:fromXDelta="100%p"
        android:toXDelta="0" />



right_out.xml

<?xml version="1.0" encoding="UTF-8"?>  
 
            android:fromXDelta="0"  
        android:toXDelta="100%p"  
       android:duration="500"/>  
 

更多相关文章

  1. android 选择本地图片并预览
  2. Android(安卓)UI 设计准则
  3. Android中帧动画
  4. android 图片背景使用这种方式很爽
  5. android获得圆角图片
  6. android ViewFlipper实现图片轮播
  7. Android如何使用XML创建一个环形渐变颜色图片
  8. android滑动view
  9. Android在Button按钮上同时显示文字和图片

随机推荐

  1. android翻译
  2. Android(安卓)Paint
  3. Android的UI主线程和子线程
  4. Android 4.4 音量调节流程分析(一)
  5. Android 中几个重要的View
  6. Linux下搭建Android开发环境及Android真
  7. android中实现view的更新UI有两组方法的
  8. android Animation动画效果基础
  9. Android(安卓)View 绘制流程之四:绘制流程
  10. 《Android开发从零开始》――18.消息处理