您的位置:首页 > 产品设计 > UI/UE

Android高级UI GestureDetector监听各种手势

2016-05-30 13:18 337 查看

内容

第一部分:介绍
GestureDetector


第二部分:改造之前用ViewFlipper实现的实例,使用
GestureDetector
实现图片切换功能。

要点

实现接口
OnTouchListener
,在
onTouch()
方法中由
GestureDetector
接管事件

接口
OnGestureListener


接口
OnDoubleTapListener


静态类
SimpleOnGestureListener


实现了
2、3
两个接口,却没有做具体事情。可以继承该类,需要哪个就
override
哪个部分。

xml

一般的布局即可

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/gesture_detector_linearlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.feather.androiddemos.GestureDetectorActivity">

</LinearLayout>


Java中使用GestureDetector

推荐使用
SimpleOnGestureListener

//实现OnTouchListener
public class GestureDetectorActivity extends AppCompatActivity implements View.OnTouchListener{

private LinearLayout linearLayout;
private GestureDetector gestureDetector;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_detector);

linearLayout = (LinearLayout) findViewById(R.id.gesture_detector_linearlayout);//获取该布局
linearLayout.setOnTouchListener(this);//设置监听器

//获取GestureDetector
gestureDetector = new GestureDetector(this,
new SimpleOnGestureListener() //下面实现的class(类)
);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event); //由GestureDetector进行接管,消耗掉event
return false;
}

//继承静态类,重写相应方法
class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener{

@Override//该方法就是按下时触发,此外还有近十种方法
public boolean onDown(MotionEvent e) {
Toast.makeText(GestureDetectorActivity.this, "onDown", Toast.LENGTH_SHORT).show();
return super.onDown(e);
}
}
}


ViewFliper和GestureDetector实现图片切换

之前
ViewFliper
教程链接如下:http://blog.csdn.net/feather_wch/article/details/51535660

我们将在本教程基础上进行修改:

ViewFlipperActivity
中置换为如下内容即可

public class ViewFlipperActivity extends AppCompatActivity implements View.OnTouchListener{

ViewFlipper viewFlipper = null; //ViewFlipper控件
GestureDetector gestureDetector = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_flipper);

viewFlipper = (ViewFlipper) findViewById(R.id.ViewFlipper);//获取自动切换
viewFlipper.setOnTouchListener(this);

gestureDetector = new GestureDetector(this, new SimpleOnGestureListener()); //初始化GestureDetector
}

@Override
public boolean onTouch(View v, MotionEvent event) { //触屏
//使用GestureDetector

gestureDetector.onTouchEvent(event); //GestureDetector接管触屏按键
return false;
}

//继承静态类,重写相应方法
class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener{

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

if(e2.getX() - e1.getX() > 100)//从左向右
{
//设置切换动画
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_right_in));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_right_out));
//显示上一个View
viewFlipper.showPrevious(); //从左向右,显示上一幅图片
}else if(e1.getX() - e2.getX() > 100)
{
//设置切换动画
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_left_in));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_left_out));

viewFlipper.showNext(); //从左向右,显示下一幅图片
}
return true;
}

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