最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多。刚接触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. Ubuntu: GlusterFS+HBase安装教程

    HBase通常安装在Hadoop HDFS上,但也能够安装在其它实现了Hadoop文件接口的分布式文件系统上.如KFS. glusterfs是一个集群文件系统可扩展到几peta-bytes. 它集合了 ...

  2. android 处理Back键按下事件

    package com.example.keyevent; import android.os.Bundle; import android.view.KeyEvent; import android ...

  3. vue 组件之间的传值

    父向子传值父组件 <v-footer :projectdat="dat"></v-footer> export default { data() { ret ...

  4. 关于linux下QIODevice类进行读取的几个方法的理解

    Qt中对读写设备的支持力度很大,其都继承与QIODevice类,其中有几个方法是非常值得注意的,不管是在用原始的serial port进行通信还是使用网络的TCP/IP 或者UDP或者HTTP等协议时 ...

  5. 14.boost最小生成树 kruskal_min_spainning_tree

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

  6. css3 字体、2D转换、3D转换

    学习篇之CSS3 字体.2D转换.3D转换 一.字体 @font-face 将字体文件存放到 web 服务器上,通过CSS3 @font-face规则中定义,它会在需要时被自动下载到用户的计算机上. ...

  7. 10:Challenge 3(树状数组直接修改)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...

  8. Servlet学习(一)——Servlet的生命周期、执行过程、配置

    1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过jav ...

  9. 【摘录】JDBC Master Slave(JDBC方式的JMS集群)

    JDBC Master Slave First supported in ActiveMQ version 4.1 If you are using pure JDBC and not using t ...

  10. 小型ceph集群的搭建

    了解ceph DFS(distributed file system)分布式存储系统,指文件系统管理的物理存储资源,不一定直接连接在本地节点上,而是通过计算机网络与节点相连,众多类别中,ceph是当下 ...