Android:实现手势滑动的事件处理方法
2013-06-17 23:55
555 查看
首先得Activity必须实现OnGestureListener接口,该接口提供了关于手势操作的一些方法,
onDown方法:onDown是,一旦触摸屏按下,就马上产生onDown事件
public boolean onDown(MotionEvent e) {
return
false;
}
onFling方法:当手在屏幕上滑动但手未离开屏幕时触发
参数:
MotionEvent e1 手开始触碰屏幕的位置的MotionEvent对象
MotionEvent e2 手结束触碰屏幕的位置的MotionEvent对象
float velocityX 表示手在水平方向的移动速度
float velocityX 表示手在垂直方向的移动速度
public
boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY)
onLongPress方法:长按屏幕时触发
public void onLongPress(MotionEvent e)
onScroll方法:当手在屏幕上滑动离开屏幕时触发,参数跟onFling一样(注意两者的区别)
public
boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY)
onShowPress方法:点击了触摸屏,但是没有移动和弹起的动作onShowPress和onDown的区别在于 onDown是,一旦触摸屏按下,就马上产生onDown事件,但是onShowPress是onDown事件产生后, 一段时间内,如果没有移动鼠标和弹起事件,就认为是onShowPress事件。
public
void onShowPress(MotionEvent e)
onSingleTapUp方法:轻击触摸屏后,弹起。如果这个过程中产onLongPress、onScroll和onFling事件,就不会 产生onSingleTapUp事件。
public
boolean onSingleTapUp(MotionEvent e)
注意:手势是要结合触摸才能有效的,所以该类必须实现onTouchEvent方法,该方法响应触摸事件
public
boolean onTouchEvent(MotionEvent event) {
//这里将当前事件交给手势管理器处理
// gesture是手势管理器(GestureDetector)
return
gesture.onTouchEvent(event);
}
完整代码:
布局文件:
效果:
onDown方法:onDown是,一旦触摸屏按下,就马上产生onDown事件
public boolean onDown(MotionEvent e) {
return
false;
}
onFling方法:当手在屏幕上滑动但手未离开屏幕时触发
参数:
MotionEvent e1 手开始触碰屏幕的位置的MotionEvent对象
MotionEvent e2 手结束触碰屏幕的位置的MotionEvent对象
float velocityX 表示手在水平方向的移动速度
float velocityX 表示手在垂直方向的移动速度
public
boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY)
onLongPress方法:长按屏幕时触发
public void onLongPress(MotionEvent e)
onScroll方法:当手在屏幕上滑动离开屏幕时触发,参数跟onFling一样(注意两者的区别)
public
boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY)
onShowPress方法:点击了触摸屏,但是没有移动和弹起的动作onShowPress和onDown的区别在于 onDown是,一旦触摸屏按下,就马上产生onDown事件,但是onShowPress是onDown事件产生后, 一段时间内,如果没有移动鼠标和弹起事件,就认为是onShowPress事件。
public
void onShowPress(MotionEvent e)
onSingleTapUp方法:轻击触摸屏后,弹起。如果这个过程中产onLongPress、onScroll和onFling事件,就不会 产生onSingleTapUp事件。
public
boolean onSingleTapUp(MotionEvent e)
注意:手势是要结合触摸才能有效的,所以该类必须实现onTouchEvent方法,该方法响应触摸事件
public
boolean onTouchEvent(MotionEvent event) {
//这里将当前事件交给手势管理器处理
// gesture是手势管理器(GestureDetector)
return
gesture.onTouchEvent(event);
}
完整代码:
package com.zzq.activity; import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.widget.ImageView; public class GestureTestActivity extends Activity implements OnGestureListener{ /** Called when the activity is first created. */ /**定义手势管理器*/ private GestureDetector gesture; /**得到要切换的图片数组*/ private int[] imgarr = new int[]{ R.drawable.whatsnew_fornew_01, R.drawable.whatsnew_fornew_02, R.drawable.whatsnew_fornew_03, R.drawable.whatsnew_fornew_04, R.drawable.whatsnew_fornew_05 }; //这个是显示五个小点的ImageView的id private int[] dotIdarr = new int[]{ R.id.img_one_id, R.id.img_two_id, R.id.img_three_id, R.id.img_four_id, R.id.img_five_id, }; /**图片的当前位置*/ private int loca = 0; /**显示图片的组件*/ private ImageView mainImage; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainImage = (ImageView)findViewById(R.id.image_id); //这里是创建一个手势管理器对象 gesture = new GestureDetector(this); //初始状态让ImageView显示第一张图片 mainImage.setImageResource(imgarr[loca]); ImageView imgone = (ImageView)findViewById(R.id.img_one_id); //初始状态设置小圆点为白点(表示当前显示第一张图片) imgone.setImageResource(R.drawable.page_indicator_focused); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return gesture.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //去掉上一个的白原点 ImageView dotTopImg = (ImageView)findViewById(dotIdarr[loca]); dotTopImg.setImageResource(R.drawable.page_indicator_unfocused); //从右往左滑动,并且滑动距离至少为100像素 if(e1.getX()-e2.getX()>100){ //当滑到最后一张时,回到第一张 if(loca==(imgarr.length-1)){ loca = -1; } loca++; //显示下一张图片 mainImage.setImageResource(imgarr[loca]); } //从左往右滑动 else if(e1.getX()-e2.getX()< -100){ //当滑到第一张时,回到最后一张 if(loca==0){ loca = 5; } loca--; mainImage.setImageResource(imgarr[loca]); } //设置当前显示图片对应原点 ImageView dotImg = (ImageView)findViewById(dotIdarr[loca]); dotImg.setImageResource(R.drawable.page_indicator_focused); return true; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <ImageView android:id="@+id/image_id" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:id="@+id/dot_imge_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_horizontal" android:layout_marginBottom="38dp" android:orientation="horizontal" > <ImageView android:id="@+id/img_one_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> <ImageView android:id="@+id/img_two_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:src="@drawable/page_indicator_unfocused" /> <ImageView android:id="@+id/img_three_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:src="@drawable/page_indicator_unfocused" /> <ImageView android:id="@+id/img_four_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:src="@drawable/page_indicator_unfocused" /> <ImageView android:id="@+id/img_five_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:src="@drawable/page_indicator_unfocused" /> </LinearLayout> </RelativeLayout>
效果:
相关文章推荐
- Android:实现手势滑动的事件处理方法
- Android:实现手势滑动的事件处理方法
- Android:实现手势滑动的事件处理方法
- Android实现手势滑动的事件处理方法
- Android:实现手势滑动的事件处理方法
- Android:实现手势滑动的事件处理方法
- Android移动开发-手势事件处理MotionEvent的实现
- android onTouchEvent 左右手势滑动事件处理
- android手势操作滑动效果触摸屏事件处理
- android 手势操作 滑动效果 触摸屏事件处理
- android手势操作滑动效果触摸屏事件处理
- android手势操作滑动效果触摸屏事件处理
- android手势操作滑动效果触摸屏事件处理、GestureDetector用法
- Android UI事件处理——实现事件监听接口的4种方法
- android手势操作滑动效果触摸屏事件处理
- Android 滑动侧边栏(Sliding Menu)第一种实现 - 2 手动滚动+自动滚动 + 事件处理
- Android处理手势识别的解决方法(左右滑动)
- android onTouchEvent 左右手势滑动事件处理
- android手势操作滑动效果触摸屏事件处理