HorizontalScrollView内的多个tab的滑动处理

来源:互联网 发布:网络计划图计算 编辑:程序博客网 时间:2024/05/16 15:44

我们在开发中经常会遇到水平的标签滚动条,如何保证我们在选中当前项时标签始终处在我们视线的合理位置,就像下面这样

标签在最左或最右:
in_screen

标签在中间位置:
over_screen

我这里说的合理位置是:
1.选中最左或最右侧的标签其位置不变,
2.选中中间的一些标签则滚动到水平ScrollView的中间位置。
而事实上这正是符合开发符合需求符合用户的合理布局。

实现起来要注意标签的滑动是相对于水平中心位置,还要注意标签自身也有一个宽度:

//切换标签    private void switchTab(int position) {        //获取在当前窗口内的绝对坐标        View view = tabs.getChildAt(position);        int[] location = new int[2];        view.getLocationInWindow(location);        Log.e("", "view--->x坐标:" + location[0] + "view--->y坐标:" + location[1]);        //获取屏幕x方向中间点的绝对坐标        DisplayMetrics metrics = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(metrics);        int screenWidth = metrics.widthPixels;        Log.e("", "screenWidth:" + screenWidth);        //将选中标签移动到中心位置,因为标签自己也具有宽度,所以要加 view.getWidth() / 2        hsvTabs.scrollBy(location[0] + view.getWidth() / 2 - screenWidth / 2, 0);        for (int i = 0; i < views.size(); i++) {            views.get(i).setBackgroundResource(R.drawable.tv_green);        }        views.get(position).setTextColor(Color.WHITE);        views.get(position).setBackgroundResource(R.drawable.tv_orange);    }

DEMO下载

0 0