滑动切换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 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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; } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步