android tab之间滑动切换界面功能
1. onTouchListener(); //捕捉touch事件,比如说onDown
需要将可滑动的控件加上两个方法:(1)view.setOnTouchListener(); //实现可以touch
(2) view.setLongClickAble(); //如果不加这个方法,这个view只会接受onDown()点击事件。onFling() onScroll()等方法不接受
此方法需要注意,其目的是接收控件的touch事件,哪需要就要在哪加上。比如说最外面的Layout,中间的ListView,尤其注意当有ScrollView时一定要给它也加上这个方法,否则ScrollView里面的控件会不接受onFling()方法。
2. GestureDetector //手势识别
其中我们要使用的是继承了GestureDetector.onDoubleTapLisener和GestureDetector.OnGestureListener的GestureDetector.SimpleOnGestureListener。其中重写onFling()方法。此方法是在快速滑动屏幕时才会执行,正好符合我们的功能。
中间我们要把自定义的GestureDetector类与控件的onTouch()方法关联起来。在Activity中实现View.OnTouchListener(),重写它的方法:
GestureDetector detector = new GestureDetector(new MySimpleGestureDetector());
public void onTouch(View view, MontionEvent event){
return detector.onTouchEvent(event); //关联
}
方法体如下:附注释
public class MySimpleGestureDetector extends GestureDetector.SimpleOnGestureListener {
private static final int MIN_DISTANCE = 100; //最小距离
private static final int MIN_VELOCITY = 100; //最小滑动速率
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(velocityX) > MIN_VELOCITY) {
if ((e2.getX() - e1.getX()) > MIN_DISTANCE) { //向右滑动
TabActivity.flingRight();
} else if ((e1.getX() - e2.getX()) > MIN_DISTANCE) { //向左滑动
TabActivity.flingLeft();
}
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
3. 此时所有支持滑动的控件都加上了touch监听事件,并关联到自定义的SimpleGestureDetector里。并且在自定义的SimpleGestureDetector中重写的onFling()方法,处理了左右快速滑动操作。滑动最小距离为100px,X轴上滑动最小速率为100px/s。所以最后一步就是在你的TabActivity中处理左右滑动就可以了。附代码:
public static void flingLeft() {
int currentTab = tabHost.getCurrentTab();
if (currentTab != 0) {
currentTab--;
switchTab(currentTab);
}
}
public static void flingRight() {
int currentTab = tabHost.getCurrentTab();
if (currentTab != tabHost.getTabWidget().getChildCount()) {
currentTab++;
switchTab(currentTab);
}
}
private static void switchTab(final int toTab) {
new Thread(new Runnable() {
@Override
public void run() {
tabHost.post(new Runnable() {
@Override
public void run() {
tabHost.setCurrentTab(toTab);
}
});
}
}).start();
}
这样一个支持左右滑动切换界面的Tab就做好了。
android tab之间滑动切换界面功能的更多相关文章
- 实现了在android实现左右滑动切换界面的效果
这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下. 布局文件 <?xml version="1.0" enc ...
- Fragment+ViewPager实现仿微信点击和滑动切换界面
这是在我写的新闻App中实现的界面切换 贴出切换界面的主要代码: xml代码: <span style="font-size:14px;"> <android.s ...
- 使用Android studio作按键切换界面
一.新建工程 二.新建一个按键 android:layout_width="wrap_content" android:layout_hei ...
- android 图片浏览器滑动切换图片
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- unity Tab键实现切换输入框功能
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- Android Activity之间经典切换动画
package com.iteye.androidtoast; import java.util.ArrayList; import java.util.List; import android.ap ...
- android viewpager fragment 优化 切换界面 延时加载
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 使用 碎片的 设置用户可见暗示visible hint 这个方法来做到. hint 是 ...
- 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3 2.Fragment生命周期以及与Activ ...
- 转载【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 原文链接 http://www.cnblogs.com/monodin/p/3866441.html 1.使用场景 ViewPager+ ...
随机推荐
- chkconfig命令具体介绍
命令介绍: chkconfig命令用来更新.查询.改动不同执行级上的系统服务.比方安装了httpd服务,而且把启动的脚本放在了/etc/rc.d/init.d文件夹下,有时候须要开机自己主动启动它,而 ...
- 外网登陆SAP的两种方式
1.用SAP router实现从外网登录SAPserver(方式一) 自已搭建的局域网结构例如以下: SAPserverIP: 192.168.0.2, 路由器中设为DMZ区 在SAPserver上启 ...
- Sublime Text 3 快捷鍵
/*On OS X, basic text manipulations (left, right, command+left, etc) make use of the system key bind ...
- C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
在早期的C++中.假设须要一些接受一些參数的构造函数,同一时候须要一个不接收不论什么參数的默认构造函数.就必须显示地编写空的默认构造函数.比如: //tc.h class A{ private: in ...
- <实战> 通过分析Heap Dump 来了解 Memory Leak ,Retained Heap,Shallow Heap
引入: 最近在和别的团队的技术人员聊天,发现很多人对于堆的基本知识都不太熟悉,所以他们不能很好的检测出memory leak问题,这里就用一个专题来讲解如何通过分析heap dump文件来查找memo ...
- 给class添加id封装
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- eclipse的remote search
一般你希望以部分文件名作为关键字的时候,可以选择这个搜索选项,当然你也可以选择操作系统自带的搜索功能
- C#中一道关于多线程的编程题
题目的意思是这样的:让两个线程A和B将自己的ID轮番写入一个文件中,每个线程重复十次写入后执行一个回调函数,说“I'm OK”,就这样.我是一名QA,不是开发,出于兴趣报考了公司的C#课程考试,多线程 ...
- poj2452
题意:就是说给你一段区间,要你找出一段最长的区间,在这段区间的所有数都大于区间的第一个数.小于区间的最后一个数......输出区间的长度,若是长度为0则输出-1. 4 5 4 3 6 4 6 5 4 ...
- VBA学习笔记(5)--事件,记录每次操作改动
说明(2017.3.24): 1. 记录sheet1里面的每次改动,和改动时间! 2. 不能记录大范围的删除.改动,会提示“类型不匹配” Private Sub Worksheet_Change(By ...