欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

封装的android监听手指左右滑动屏幕的事件类分享

程序员文章站 2022-08-17 18:05:05
左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了。 简单的只需要几行就可以了,下面那个类是封装好了的。 package com.ex...

左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了。

简单的只需要几行就可以了,下面那个类是封装好了的。

package com.example.test;

import android.os.bundle;
import android.app.activity;
import android.content.context;
import android.util.log;
import android.widget.relativelayout;

public class mainactivity extends activity {
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);//这里的xml是一个空白的layout
 
 //需要监听左右滑动事件的view
 relativelayout view = (relativelayout) this.findviewbyid(r.id.layout);
 
 //setlongclickable是必须的
 view.setlongclickable(true);
 view.setontouchlistener(new mygesturelistener(this));
 }
 
 /**
 * 继承gesturelistener,重写left和right方法
 */
 private class mygesturelistener extends gesturelistener {
 public mygesturelistener(context context) {
  super(context);
 }

 @override
 public boolean left() {
  log.e("test", "向左滑");
  return super.left();
 }

 @override
 public boolean right() {
  log.e("test", "向右滑");
  return super.right();
 }
 }
}


package com.example.test;

import android.content.context;
import android.view.gesturedetector.simpleongesturelistener;
import android.view.gesturedetector;
import android.view.view;
import android.view.view.ontouchlistener;
import android.view.motionevent;

/**
 * 实现监听左右滑动的事件,哪个view需要的时候直接setontouchlistener就可以用了
 * @author linzhiquan
 *
 */
public class gesturelistener extends simpleongesturelistener implements ontouchlistener {
 /** 左右滑动的最短距离 */
 private int distance = 100;
 /** 左右滑动的最大速度 */
 private int velocity = 200;
 
 private gesturedetector gesturedetector;
 
 public gesturelistener(context context) {
 super();
 gesturedetector = new gesturedetector(context, this);
 }

 /**
 * 向左滑的时候调用的方法,子类应该重写
 * @return
 */
 public boolean left() {
 return false;
 }
 
 /**
 * 向右滑的时候调用的方法,子类应该重写
 * @return
 */
 public boolean right() {
 return false;
 }
 
 @override
 public boolean onfling(motionevent e1, motionevent e2, float velocityx,
  float velocityy) {
 // todo auto-generated method stub
 // e1:第1个action_down motionevent
 // e2:最后一个action_move motionevent
 // velocityx:x轴上的移动速度(像素/秒)
 // velocityy:y轴上的移动速度(像素/秒)

 // 向左滑
 if (e1.getx() - e2.getx() > distance
  && math.abs(velocityx) > velocity) {
  left();
 }
 // 向右滑
 if (e2.getx() - e1.getx() > distance
  && math.abs(velocityx) > velocity) {
  right();
 }
 return false;
 }

 @override
 public boolean ontouch(view v, motionevent event) {
 // todo auto-generated method stub
 gesturedetector.ontouchevent(event);
 return false;
 }

 public int getdistance() {
 return distance;
 }

 public void setdistance(int distance) {
 this.distance = distance;
 }

 public int getvelocity() {
 return velocity;
 }

 public void setvelocity(int velocity) {
 this.velocity = velocity;
 }

 public gesturedetector getgesturedetector() {
 return gesturedetector;
 }

 public void setgesturedetector(gesturedetector gesturedetector) {
 this.gesturedetector = gesturedetector;
 }
}