• 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就做好了。

  • 相关阅读:
    算法
    用python代码编写象棋界面,棋盘覆盖问题
    深浅拷贝的原理
    MongoDB简介,安装,增删改查
    DBUtils-Python数据库连接池
    websocket
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    跨域
    最长公共子序列/子串 LCS(模板)
    寒假作业---蓝桥杯---DFS
  • 原文地址:https://www.cnblogs.com/lianghui66/p/3213944.html
Copyright © 2020-2023  润新知