Android右滑返回上一个界面的实现方法
Android右滑返回上一个界面的实现方法
public class BaseActivity extends Activity implements OnTouchListener {
public ProgressDialog progressDialog;
public String states;
public RequestQueue mQueue;
/** 触摸时按下的点 **/
PointF downP = new PointF();
/** 触摸时当前的点 **/
PointF curP = new PointF();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
curP.x = event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downP.x = event.getX();
break;
case MotionEvent.ACTION_MOVE:
if (curP.x- downP.x 500) {
Log.i("TEST", "move-=-=-=--=-");
finish();
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
如上所示,既然要滑动返回上一个界面,我给出的方法是重写onTouchEvent事件,所以我们实现了OnTouchListener 这个接口,
接下来的事情就是,我们要做些什么事呢,没错,就是滑动判断,至于事件 switch 里面的 各个情况对应的是我们对屏幕做了什么样的操作就不解释了,(可以自行百度)如上所示,如果滑动距离超过500像素,就结束当前activity,其实写到这里基本上就没了,但是我怎么可能写这么低端的博客,你们说是不是,好的,重点来了,
博主帅哥,我现在就是用的你这个方法,但是为毛 scrollview 下的布局,对这个接口无效呢,好的,问的漂亮,我的回答是:我tm哪知道,….
OK,我们看下scrollview 源码:
他喵的,果然重写了这个方法, 根据 view 触碰事件的传递顺序,scrollview会先拦截到事件,所以,我们要做的就是,在不对scrollview本来的拦截事件做改变的情况下,加入我们所需要的需求来满足我们实现功能, 那么就很简答了, 当然是 自己 定义一个view,代码如下:
public class BackScrollView extends ScrollView {
/** 触摸时按下的点 **/
PointF downP = new PointF();
/** 触摸时当前的点 **/
PointF curP = new PointF();
public BackScrollView(Context context) {
super(context);
}
public BackScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public BackScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
curP.x = event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downP.x = event.getX();
Log.i("TEST", "downP.x-=-=-=--=-" + downP.x);
break;
case MotionEvent.ACTION_MOVE:
Log.i("TEST", "downP.x-=-=-=--=-" + curP.x);
if (downP.x < 200) {
if (curP.x - downP.x 500) {
return false;
}
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.onTouchEvent(event);
}
OK,在如上代码中,可以看到我们做了一个判断,当触摸点像素距离屏幕最左边200像素以内时,滑动才有效果,否则执行父类方法,没了? 我仅举这一例子说明可能存在的一些问题,当然,如果布局中也有其它控件出现类似的情况,那么跟 这个一样,自己定义一个view,重写它的 触摸事件,(其实自定义view很简单的,哥刚开始也觉得很难,后来 也就那样….) ,当然,直接finish可能会显得太单一,你们可以充分发挥你们的想象,可以添加一些动画进去,使得界面更加炫,
OK,今天就扯到这里,吃饭 time…
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
- 《大型网站技术架构》学习笔记-02架构篇
- POJ2488-A Knight's Journey(DFS+回溯)
- FreeMarker快速入门
- 用只含一个链域的节点实现循环链表的双向遍历
- 亚马逊注册3个新域名引发预测,或成为最大数字货币交易所
- POJ-1979 Red and Black(DFS)
- 06-图2 Saving James Bond - Easy Version
- 06-图1 列出连通集
- Bootstrap快速入门
- 常用工具(Windows版本)
- Hadoop快速入门
- Lake Counting(POJ-2386)
- Vue快速入门
- 04-树6. Huffman Codes--优先队列(堆)在哈夫曼树与哈夫曼编码上的应用
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释