Andorid手势练习

复制代码
package com.llm;

import util.CountDownButton;
import util.CountDownButton.OnCountDownListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class AddViewDemoActivity
    extends Activity
    implements OnClickListener, OnTouchListener, OnGestureListener {
    /** Called when the activity is first created. */
    private static final int FLING_MIN_DISTANCE = 100;
    private static final int FLING_MIN_VELOCITY = 200;
    private GestureDetector mGestureDetector;
    private Toast toast;
    // 一维数组
    private String[] strs = new String[] {"哈哈1", "Sres2", "fdfd3", "dsdsd4", "fdfd5", "dsdsd6"};
    // 二维数组
    private int[][] numseven = new int[][] { {10, 20, 30}, {40, 50}, {60}, {70, 80, 90}, {100},
            {101, 102, 103, 104, 105, 106}};;
    private int[][] nums = new int[4][5];// 4、5代表的是数组的长度4指0~3,5指0~4

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
        mGestureDetector = new GestureDetector(this);
        toast = ToastUtils.getToastInstance(AddViewDemoActivity.this);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        Button button1 = new Button(this);
        Button button2 = new Button(this);
        CountDownButton button3 = new CountDownButton(this);
        button1.setText("按钮1");
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                toast.setText(String.valueOf(numseven[5][4]));
                toast.show();
            }
        });
        button2.setText("按钮2");
        button3.setCount(15);
        layout.addView(button1);
        layout.addView(button2);
        layout.addView(button3);
        button3.setOnCountDownListener(new OnCountDownListener() {

            @Override
            public void onTick() {
                // TODO Auto-generated method stub
                Log.i("lilongmin", "onTick");
            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                Log.i("lilongmin", "onFinish");
                AddViewDemoActivity.this.finish();
            }
        });
        setContentView(layout);
        button2.setOnTouchListener(this);
        button2.setLongClickable(true);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
// toast.setText("onTouch");
// toast.show();
        return mGestureDetector.onTouchEvent(event);
    }

    // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        toast.setText("onDown");
        toast.show();
        return false;
    }

    // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        // 参数解释:
        // e1:第1个ACTION_DOWN MotionEvent
        // e2:最后一个ACTION_MOVE MotionEvent
        // velocityX:X轴上的移动速度,像素/秒
        // velocityY:Y轴上的移动速度,像素/秒
        // 触发条件 : X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
// if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// // Fling left
// toast.setText("Fling Left");
// toast.show();
// }
// else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// // Fling right
// toast.setText("Fling Right");
// toast.show();
// }
        if (e1.getY() - e2.getY() > 100) {
            toast.setText("手势向上滑动");
            toast.show();
            return true;
        }
        else if (e1.getY() - e2.getY() < -100) {
            toast.setText("手势向下滑动");
            toast.show();
            return true;
        }
        else if (e1.getX() - e2.getX() > 100) {
            toast.setText("手势向左滑动");
            toast.show();
            return true;
        }
        else if (e1.getX() - e2.getX() < -100) {
            toast.setText("手势向右滑动");
            toast.show();
            return true;
        }
        return false;
    }

    // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub
        toast.setText("onLongPress");
        toast.show();
    }

    // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        // TODO Auto-generated method stub
        toast.setText("onScroll");
        toast.show();
        return false;
    }

    // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
    // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub
        toast.setText("onShowPress");
        toast.show();
    }

    // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        toast.setText("onSingleTapUp");
        toast.show();
        return false;
    }
}

下载地址:https://files.cnblogs.com/llm-android/AddViewDemo.rar

 

 
复制代码
posted @   灰太狼_lilongmin  阅读(218)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示