GestureDetector手势检测笔记

package com.example.gesturetext3;
/*概念:GestureDetector手势检测类,创建GestureDetector时必传入一个GestureDetector实例,其是一个检测器,负责对用户的手势行为提供响应
 * 1.onGestureListener内包含事件处理的方法onDown(MotionEvent e) onFling(),onLongPress(),onScroll(),onShowPress(),onSingleTapUp()
 * 2.每个有每个的方法,此些方法参数加以条件约束 ,并作出手势的划动便可作出相关的活动
 * 3.以下为一实例,通过手势实现翻页效果,加深理解
 */
import android.os.Bundle;
import android.app.Activity;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
//必须实现OnGestureListener接口,以便对手势进行检测
public class MainActivity extends Activity implements OnGestureListener{
     ViewFlipper flipper;    //定义ViewFlipper组件
     GestureDetector detector;  
     Animation[] animations=new Animation[4];   //定义动画数组,用于为ViewFlipper指定切换时展现动画效果
     final int FLIP_DISTANCE=50;                //定义左右划动的最小距离,达到这个距离才会触发事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector=new GestureDetector(this,this);   //创建手势实例
//创建ViewFlipper实例
flipper=(ViewFlipper)this.findViewById(R.id.flipper);
flipper.addView(addImageView(R.drawable.yecun1)); //添加图片
flipper.addView(addImageView(R.drawable.yecun2));
flipper.addView(addImageView(R.drawable.yecun3));
flipper.addView(addImageView(R.drawable.yecun4));
flipper.addView(addImageView(R.drawable.yecun5));
flipper.addView(addImageView(R.drawable.yecun6));
flipper.addView(addImageView(R.drawable.yecun7));
flipper.addView(addImageView(R.drawable.yecun8));
//初始化animaitions数组
animations[0]=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.left_in);
animations[1]=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.left_out);
animations[2]=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.right_in);
animations[3]=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.right_out);
}
//定义一个方法,从Image内取出图片,返回ImageVeiw;
private View addImageView(int yecun) {
// TODO Auto-generated method stub
ImageView imageView=new ImageView(this);
imageView.setImageResource(yecun);
imageView.setScaleType(ImageView.ScaleType.CENTER);
return imageView;
}
@Override
public boolean onTouchEvent(MotionEvent me){  //此方法在手势检测实例必写的一个方法,通过感应事件返回检测器的执行效果
return detector.onTouchEvent(me);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}


@Override
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
//如果第一个触点横向坐标大于第二个触点事件的X坐标超过FLIP_DISTANCE
if(event1.getX()-event2.getX()>FLIP_DISTANCE){
flipper.setInAnimation(animations[0]);
flipper.setOutAnimation(animations[1]);
flipper.showPrevious();    //返回上一个图片
return true;
}
//如果第二个事件的横向X坐标大于第一个事件坐标的横向X距离
else if(event2.getX()-event1.getX()>FLIP_DISTANCE){
flipper.setInAnimation(animations[2]);
flipper.setOutAnimation(animations[3]);
flipper.showNext();   //返回下一张图片
return true; 
}
return false;
}
@Override
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
}

你可能感兴趣的:(疯狂android基础)