最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多。刚接触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;
}
}

滑动切换Activity代码的更多相关文章

  1. 基于jQuery左右滑动切换图片代码

    分享一款基于jQuery左右滑动切换图片代码.这是一款基于jQuery实现的左右滑动切换焦点图代码.效果图如下: 在线预览   源码下载 实现的代码: <div class="v_ou ...

  2. 一分钟搞定触手app主页酷炫滑动切换效果

    代码地址如下:http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想这 ...

  3. Android的Activity屏幕切换动画(一)-左右滑动切换

    (国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) Android的Activity屏幕切换动画(一)-左右滑动切换 在Android开发过程 ...

  4. Android的Activity屏幕切换动画左右滑动切换

    在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity ...

  5. jQuery左侧图片右侧文字滑动切换代码

    分享一款jQuery左侧图片右侧文字滑动切换代码.这是一款基于jQuery实现的列表图片控制图片滑动切换代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div cla ...

  6. 【android】实现手指滑动来切换activity(转)

    http://code.eoe.cn/115 1.jpg外部引用 原始文档 MainActivity.java外部引用 原始文档 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  7. 微信小程序左右滑动切换页面示例代码--转载

    微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...

  8. Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

    viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCo ...

  9. Android之fragment点击切换和滑动切换结合

    学了一小段时间的Android,主要接触的是UI设计,打交道最多莫过于fragment了吧.在Android3.0引入了fragment的概念后,几乎在所以的Android的应用中都可以看见其身影,已 ...

随机推荐

  1. Java的接口总结

    Java最主要的封装是class.除此之外还有接口interface. 这段时间一直在想接口有什么作用呢.有了接口有哪些优点呢.结合网络上各位大神的文章,接口的作用大概体如今下面几个方面. 1.回调 ...

  2. Revit二次开发实现BIM盈利(以橄榄山快模为例解说) 视频讲座下载

    应笔墨闲谈群的邀请, 在10月11号晚8:30分在其群做了一次关于BIM二次开发的讲座. 因为參与者基本上都是从设计院和施工单位来的,所以对Revit二次开发做了纵览性的解说, 以非程序猿能听懂的方式 ...

  3. C++ STL 源代码学习(之deque篇)

    stl_deque.h /** Class invariants: * For any nonsingular iterator i: * i.node is the address of an el ...

  4. yolo环境配置

    主要配置参考官网https://pjreddie.com/darknet/yolo/ 为了能够可视化,另安装cuda+opencv cuda版本为9.0 opencv版本为3.1.0 先安装cuda再 ...

  5. bzoj4823: [Cqoi2017]老C的方块(最小割)

    4823: [Cqoi2017]老C的方块 题目:传送门 题解: 毒瘤题ORZ.... 太菜了看出来是最小割啥边都不会建...狂%大佬强强强   黑白染色?不!是四个色一起染,四层图跑最小割... 很 ...

  6. 91.Bower : ENOGIT git is not installed or not in the PATH 解决方法

    转自:https://www.haorooms.com/post/bower_error 今天在用bower安装依赖的时候,出现了Bower : ENOGIT git is not installed ...

  7. 记录一下c++的一点指针所得

    c++有两种传值可以改变外部参数,一种是传递指针,另一种是传递引用,对于前者,可以用Ugly(but explicitly),对于后者,Clean(but hidden),在传递的时候有一种值得注意的 ...

  8. 模仿百度首页“元宵节汤圆”动图,并实现360°不停旋转(CSS3的animation动画效果)

    模仿百度首页“元宵节汤圆”动图,并实现360°不停旋转(CSS3的animation动画效果) 效果图: 切图地址: https://ss1.bdstatic.com/5eN1bjq8AAUYm2zg ...

  9. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  10. UWP连接mysql 实现数据远程备份

    昨晚吃饭的时候突然觉得我们这个UWP应该添个数据备份的功能,不然换手机,换电脑之后数据库就全没了... 一开始是想用微软提供的AZURE的,没想到这玩意又没什么资料而且申请试用的时候还让我交身份证照片 ...