您的位置:首页 > 移动开发 > Android开发

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);
}

完整代码:

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>


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: