• 滑动切换Activity代码


           最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多。刚接触Android时间不长,很多东西都不能融会贯通,所以才会有这样的问题存在,当然学习中遇到的问题很有必要做个总结。想想这个需求也是比较简单,就是不想让右图界面上出现点击Button切换Activity,这也许是许多刚接触的朋友都会萌生的念头吧,我也不例外。
    开始在网上找的方法很多都是讲到ViewPager这样的东西,Demo看了,也模仿了一个出来,但终究发现不能满足自己的需求,使用了ViewPager后,布局都是通过代码加载到第一个Activity中,无法再获取布局中的控件进行操作,所以这个方案放弃了。
            那接下来就用我的style来看看这段代码的实现。大致的思路就是找系统相关监听屏幕动作的事件方法,刚好在Activity中有onTouchEvent方法可以得到屏幕的触摸事件,参数MotionEvent event可以得到屏幕触摸的位置。突然发现这个东西没有一点技术含量,原理太简单。
            原理:通过event对象的方法event.getAction()可以获得触摸按下和触摸释放的动作,同时通过event.getRawX()和event.getRawY()又可以获得触摸点的坐标,这样,在触摸按下时记录起始点的X、Y对应值,在触摸释放量再次获得X、Y的坐标位置,通过起始和释放点的坐标,可以确定到底是向上、向下、向左还向右的操作。
            方法 onTouchEvent 代码:

    public boolean onTouchEvent(MotionEvent event) {
    		int action = event.getAction();
    		switch (action) {
    		case MotionEvent.ACTION_DOWN:
    			O.X = event.getRawX();
    			O.Y = event.getRawY();
    			break;
    		case MotionEvent.ACTION_UP:
    			float x = event.getRawX();
    			float y = event.getRawY();
    			int slideOrientation = O.slide(x, y);
    			switch (slideOrientation) {
    			// case O.SLIDEUP:
    			// Toast.makeText(this, "向上滑", Toast.LENGTH_SHORT).show();
    			// break;
    			// case O.SLIDEDOWN:
    			// Toast.makeText(this, "向下滑", Toast.LENGTH_SHORT).show();
    			// break;
    			case O.SLIDELEFT:
    				// Toast.makeText(this, "向左滑", Toast.LENGTH_SHORT).show();
    				startActivity(new Intent(this, Wizard_1_Activity.class));
    				finish();
    				break;
    			// case O.SLIDERIGHT: //第一个设置界面不需要回退
    			// Toast.makeText(this, "向右滑", Toast.LENGTH_SHORT).show();
    			// break;
    
    			default:
    				break;
    			}
    			break;
    		default:
    			break;
    		}
    		return super.onTouchEvent(event);
    	}
    

     封装逻辑的O.java代码

    package com.hitech.resxantivirus.utils;
    
    public class O {
    
    	public static final int SLIDEUP = 1;
    	public static final int SLIDEDOWN = 2;
    	public static final int SLIDELEFT = 3;
    	public static final int SLIDERIGHT = 4;
    	// 横轴起始座标
    	public static float X = 0;
    	// 纵轴起始座标
    	public static float Y = 0;
    
    	private O() {
    	}
    
    	/**
    	 * 激活Activity,由屏幕Slide方向决定
    	 * 
    	 * @param x
    	 *            结束点横轴坐标
    	 * @param y
    	 *            结束点纵轴坐标
    	 * @param cls
    	 *            需要激活Activity的class
    	 */
    	public static int slide(float x, float y) {
    		float resX = X - x;
    		float resY = Y - y;
    		int res = -1;
    		// slideToLeft
    		if (resX > 10 && resY > -10 && resY < 10) {
    			res = 3;
    		}
    		// slideToRight
    		if (resX < -10 && resY > -10 && resY < 10) {
    			res = 4;
    		}
    		// slideUp
    		if (resY > 10 && resX > -10 && resX < 10) {
    			res = 1;
    		}
    		// slideDown
    		if (resY < -10 && resX > -10 && resX < 10) {
    			res = 2;
    		}
    		return res;
    	}
    }
    
  • 相关阅读:
    VS调试Libevent流程
    Lua require搜索路径指定方法
    关于“无法定位程序输入点gzdirect于动态链接库zlib1.dll”的问题
    poj 1737 Connected Graph
    迭代器挺好用的
    The Balance of the World Aizu
    Country Road Aizu
    牛客小白月赛4 C 病菌感染
    牛客小白月赛4 A 三角形
    老子的全排列呢
  • 原文地址:https://www.cnblogs.com/magics/p/3790050.html
Copyright © 2020-2023  润新知