[安卓开发基础] 手势检测GestureDetector

参考博客地址:https://blog.csdn.net/yuliyige/article/details/12655895

 

代码:

相对布局管理器,里面添加动画ViewFlipper。创建动画文件。

单击红色灯泡  实现 方法:

  1. 第一步,让MainActivity 实现Gesturedector.OnGestureListener接口动画ViewFlipper  flipper  ,Ainmation[]   animation =new  Animation[4];
  2. 定义全局的手势检测器GestureDetector   .

        Detector  =new GestureDetector(MainActivity.this,this);

  1. 将要显示的图片加载到 ViewFlipper  中。并且初始化动画。

      定义图片资源ID 数组:images[]

      ImageView   imageview

       Flipper.addView(imageview);

      //初始化动画:

       animation[0]=AnimationUtils.loadAnimation();//第一个参数  this第二个参数 动画资源。

扫描二维码关注公众号,回复: 4882306 查看本文章

4. onFling中通过 触摸事件的横坐标判断向左滑动,向右滑动。

5.boolean onTouchEvent(MotionEvent event)  返回  : detector.onTouchEvent(event);

Activity 的触摸检测 交给   detector 处理。

----------------------------------------------------------------------------------

package com.zengjx.androidbaseproject;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;

import java.security.acl.LastOwnerException;

/**
 * Created by zengjx on 2018/12/21.
 */
/**
 * 1.  第一步,让MainActivity 实现Gesturedector.OnGestureListener接口动画ViewFlipper  flipper  ,
 * Ainmation[]   animation =new  Animation[4];
 */
public class TouchChoosePictureActivity   extends AppCompatActivity   implements   GestureDetector.OnGestureListener {
    private    final    String    TAG="TouchChoose";

    ViewFlipper   viewFlipper;//循环滚动控件
    GestureDetector  detector;//手势检测
    float   distances=20;
    Animation[]  animation =  new Animation[4];
    private   int  images[]={
            R.drawable.img01,R.drawable.img02,
            R.drawable.img03,R.drawable.img04,
            R.drawable.img05,R.drawable.img06,
            R.drawable.img07,R.drawable.img08,
            R.drawable.img09,
    };



    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("TouchChoosePictureActivity");
        setContentView(R.layout.touchchoosepicture);
        setTitle("照片查看器");
        initView();
    }
     public   void  initView(){
        //2.定义手势检测器
         detector =new GestureDetector(TouchChoosePictureActivity.this,this);
         viewFlipper=findViewById(R.id.viewfliper);
         //3.将要显示的图片显示在viewFlipper
           for(int i=0;i<8;i++){
               ImageView   imageView  =new ImageView(this);
               imageView.setImageResource(images[i]);
               viewFlipper.addView(imageView);
           }
           //4.
            //设置动画方式
         animation[0]= AnimationUtils.loadAnimation(this,R.anim.slide_in_left);
         animation[1]= AnimationUtils.loadAnimation(this,R.anim.slide_out_left);
         animation[2]= AnimationUtils.loadAnimation(this,R.anim.slide_in_right);
         animation[3]= AnimationUtils.loadAnimation(this,R.anim.slide_out_right);

     }
    //// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
    @Override
    public boolean onDown(MotionEvent motionEvent) {
        Log.i(TAG,"onDown");
        return false;
    }
   //// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
  // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
    @Override
    public void onShowPress(MotionEvent motionEvent) {
        Log.i(TAG,"onShowPress");
    }
 //// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        Log.i(TAG,"onSingleTapUp");
        return false;
    }
     //// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        Log.i(TAG,"onScroll");
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {
        Log.i(TAG,"onLongPress");

    }
     //// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {

        Log.i(TAG,"onFling  motionEvent x:"+motionEvent.getX()+"motionEvent X"+motionEvent1.getX());
        // 右-----左
        if((motionEvent.getX()-motionEvent1.getX())>=distances){
            viewFlipper.setInAnimation(animation[2]);//right  --in   设置切换View的进入动画
            viewFlipper.setOutAnimation(animation[3]);//  设置切换View的退出动画
            //显示前一张  图片
            viewFlipper.showPrevious();//显示ViewFlipper里的上一个View

        }else{

            viewFlipper.setInAnimation(animation[0]);//left  --in
            viewFlipper.setOutAnimation(animation[1]);//  left  out
            //显示一张  图片
            viewFlipper.showNext();// 显示ViewFlipper里的下一个View
        }
        return false;
    }
    //第5步   Activity  手势交给 GestureDetector   处理


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return     detector.onTouchEvent(event);
    }
}

-------------------------------

ViewFlipper   

猜你喜欢

转载自blog.csdn.net/oDianZi1234567/article/details/85168403