Android获取触摸手势实现左右滑动

本文实例为大家分享了Android获取触摸手势实现左右滑动的具体代码,供大家参考,具体内容如下

一、Android提供的两种手势:

①Android提供了手势检测,并为手势提供了相应的监听器
②Android允许开发者添加手势,并提供了相应的API识别用户手势

二、手势检测:手势检测器类:GestureDetector

监听器:OnGestureListener,负责对用户的手势行为提供响应
时间处理方法:boolean OnDraw(MotionEvent e):当触摸事件按下时触发该方法
boolean OnFing(MotionEvent e1,MotionEvent e2,float velocity X,float velocity Y):当用户在触摸屏上“拖过”时触发该方法。其中 velocity X,float velocity Y代表“拖过”动作在横向,纵向上的速度
abstract void onLongPress(MotionEvent e):当用户在屏幕上长按时触发该方法
onScroll(MotionEvent e,MotionEvent e2,float distanceX,float distanceY):当用户在屏幕上“滚动”时触发该方法
void onShowPress(MotionEvent e):当用户在触摸屏上按下,而还未移动和松开时触发该方法

Android收拾检测步骤:第一步:创建一个GestureDetector对象。创建该对象时必须实现一个GestureDetector.OnGestureListener监听器实例:例如:GestureDetector detector=new GestureDetector(this,this)

应用程序的Activity的TouchEvent事件绑定监听器,在事件处理中指定Activity上的TouchEvent事件交给GestureDetector处理。例如:detector.OnTouchEvent(event)

例子:①演示事件处理的方法
②通过手势实现翻页效果:
ViewFlipper组件,该组件可使用动画控制多个组件之间的切换效果
flipper.setInAnimation()设置组件进入的动画
flipper.setOutAnimation()设置组件出去的动画
flipper.showPrevious()显示上一个视图
flipper.showNext()显示下一个视图

1.MXL如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.android_gesture.MainActivity">

    <ViewFlipper
        android:id="@+id/rs_ViewFlipper"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </ViewFlipper>

</LinearLayout>

2.样式

类名:left.in.xml   //进

<?xml version="1.0" encoding="utf-8"?>    
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"
        ></translate>
</set>

类名:left.out.xml   //出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >
    <translate
        android:fromXDelta="0"
        android:toXDelta="-100%p"
        ></translate>
</set>

类名:fight.in.xml   //进

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0"
        ></translate>
</set>

类名:fight.out.xml   //出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >
    <translate
        android:fromXDelta="0"
        android:toXDelta="100%p"
        ></translate>
</set>

3.实现JAVA类

package com.example.android_gesture;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity {

    private ViewFlipper rs_viewFlipper;
    private int image[]={R.drawable.s2,R.drawable.s4,R.drawable.s9};
    private GestureDetector gd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rs_viewFlipper = (ViewFlipper) findViewById(R.id.rs_ViewFlipper);

        for (int i = 0; i <image.length ; i++) {
            ImageView images=new ImageView(this);
            images.setImageResource(image[i]);
            rs_viewFlipper.addView(images);
        }
        //实例化手势检测器类
        gd = new GestureDetector(this, new GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent e) {//按下
                return false;
            }

            @Override
            public void onShowPress(MotionEvent e) {//按下但是还未抬起

            }

            @Override
            public boolean onSingleTapUp(MotionEvent e) {//轻按,按一下,立刻抬起
                return false;
            }

            @Override//滚动
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                return false;
            }

            @Override
            public void onLongPress(MotionEvent e) {//长按

            }

            @Override//拖动
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                if(e1.getX()-e2.getX()>100){//右滑下一张
                    rs_viewFlipper.showNext();
                    //设置效果图右滑下一张的样式,一张图片进,一张图片出
                    rs_viewFlipper.setInAnimation(MainActivity.this,R.anim.right_in);
                    rs_viewFlipper.setOutAnimation(MainActivity.this,R.anim.left_out);
                    Toast.makeText(MainActivity.this, "右滑下一张", Toast.LENGTH_SHORT).show();
                }
                if(e2.getX()-e1.getX()>100){//左滑上一张
                    rs_viewFlipper.showPrevious();
                    //设置效果图左滑上一张的样式,一张图片进,一张图片出
                    rs_viewFlipper.setInAnimation(MainActivity.this,R.anim.left_in);
                    rs_viewFlipper.setOutAnimation(MainActivity.this,R.anim.right_out);
                    Toast.makeText(MainActivity.this, "左滑上一张", Toast.LENGTH_SHORT).show();
                }
                return false;
            }
        });
    }

    @Override//触摸事件
    public boolean onTouchEvent(MotionEvent event) {
        return gd.onTouchEvent(event);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现手势滑动多点触摸缩放平移图片效果

    现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位. 一.概述 想要做到图片支持多点触控,自由的进行缩放.平移,需要了解几个知识点:Matrix , GestureDetector , ScaleGestureDetector 以及事件分发机制,ps:不会咋办,不会你懂的. 1.Matrix 矩阵,看深入了都是3维矩阵的乘啊什么的,怪麻烦的~~ 其实这么了解下就行了: Matrix 数据结构:3维矩阵

  • Android 高仿微信朋友圈动态支持双击手势放大并滑动查看图片效果

    最近参与了开发一款旅行APP,其中包含实时聊天和动态评论功能,终于耗时几个月几个伙伴完成了,今天就小结一下至于实时聊天功能如果用户不多的情况可以scoket实现,如果用户万级就可以采用开源的smack + opnefile实现,也可以用mina开源+XMMP,至于怎么搭建和实现,估计目前github上一搜一大把,至于即时通讯怕误人子弟,暂且不做介绍,现就把实现的一个微信朋友圈的小功能介绍一下. 先上效果图: 一拿到主流的UI需求,大致分析下,需要我ListView嵌套Gridview,而grid

  • Android实现手势滑动多点触摸放大缩小图片效果

    网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考 实现原理:自定义ImageView对此控件进行相应的layout(动态布局). 这里你要明白几个方法执行的流程: 首先ImageView是继承自View的子类. onLayout方法:是一个回调方法.该方法会在在View中的layout方法中执行,在执行layout方法前面会首先执行setFrame方法. setFrame方法:判断我们的View是否发生变化,如果发生变化,那么将最新的l,t,r,b传递给View,然后刷新进行动态更新

  • Android手势滑动实现ImageView缩放图片大小

    本文推出了两种Android手势实现ImageView缩放图片大小的方法,分享给大家供大家参考,具体内容如下 方法一: 将以下代码写到MulitPointTouchListener.java中,然后对你相应的图片进行OnTouchListener. 例如:imageView.setOnTouchListener(new MulitPointTouchListener ()); 在xml中要将ImageView的缩放格式改成Matrix 例如:android:scaleType="matrix&q

  • Android实现图片自动轮播并且支持手势左右无限滑动

    废话不多说了,先给大家上左右无限滑动的代码了. 1.左右无限滑动 public class MainActivity extends AppCompatActivity { private static ViewPager viewPager; private RadioGroup group; //图片资源,实际项目需要从网络获取 private int[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3, R.drawab

  • Android实现手势滑动和简单动画效果

    一.手势滑动 1.Activity都具有响应触摸事件,也就是说只要触摸Activity,他都会回调一个onTouchEvent()方法.但是在这个方法里无法处理事件,需要配合使用手势识别器(GestureDetector)中的方法onTouchEvent对事件(event)进行分析处理,我们只需要重写这个方法中的操作来达到我们的需求. /** * activity被触摸后,会回调此方法onTouchEvent,并回传一个event对象 * event对象封装了触摸时的动作信息,包括x.y坐标等等

  • Android GestureDetector手势滑动使用实例讲解

    Gesture在 ViewGroup中使用 GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等. 使用GestureDetector分三步: 1. 定义GestureDetector类 2. 初始化手势类,同时设置手势监听 3. 将touch事件交给gesture处理 先来了解一下如何使用,后面会有示例: package com.example.y2222.myview; import android.content.Context; import android.ut

  • Android自定义View实现随手势滑动控件

    本文控件为大家分享了Android随手势滑动控件的具体代码,供大家参考,具体内容如下 1.新建自定义控件类:MyView public class MyView extends Button{ //记录上次滑动后的坐标值 private int lastX; private int lastY; public MyView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyV

  • Android实现手势滑动多点触摸缩放平移图片效果(二)

    上一篇已经带大家实现了自由的放大缩小图片,简单介绍了下Matrix:具体请参考:Android实现手势滑动多点触摸缩放平移图片效果,本篇继续完善我们的ImageView. 首先加入放大后的移动. 1.自由的进行移动 我们在onTouchEvent里面,加上移动的代码,当然了,必须长或宽大于屏幕才可以移动~~~ @Override public boolean onTouch(View v, MotionEvent event) { mScaleGestureDetector.onTouchEve

  • android中view手势滑动冲突的解决方法

    Android手势事件的冲突跟点击事件的分发过程息息相关,由三个重要的方法来共同完成,分别是:dispatchTouchEvent.onInterceptTouchEvent和onTouchEvent. public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来进行事件的分发.如果事件传递到view,那么这个方法一定会被调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是

随机推荐