ScrollingTabs

Automatic Scrolling Tabs-crx插件 语言:English 该扩展名会自动向下滚动选项卡,并在到达当前选项卡底部时切换至下一个。 :copyright:版权所有CyonTech.ca 这是Chrome的应用程序,此扩展程序会自动在标签页上向下滚动,刷新下一个标签页,并在到达当前标签页底部时切换到下一个标签页。 所有这些都是完全可定制的,下一个选项卡之前和刷新之后的延迟时间,以及页面末尾的延迟时间。 非常适合制作网站演示文稿。 该应用可以随时打开或关闭。 立即下载

ScrollingTabs

自定义ScrollingTabs结合ViewPager实现指引的效果。
image

原理:
由于ScrollingTabs即可以点击又可以实现左右滑动,首先想到的就是继承HorizontalScrollView来实现滑动,至于点击的实现需要通过对View
设置点击。
通过对ViewPager设置OnPageChangeListener来监听页面变化,从而实现对ScrollingTabs的改变,而在每个Tab上设置
点击事件,当点击的时候就去设置ViewPager的当前页面

  1. 继承HorizontalScrollView,并且添加一个水平方向的线性布局,作为Tab的父布局

    public class ScrollingTabs extends HorizontalScrollView {
    
        private LinearLayout mContainer;
    
        public ScrollingTabs(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(context);
        }
    
        public ScrollingTabs(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        public ScrollingTabs(Context context) {
            super(context);
            init(context);
        }
    
        private void init(Context context) {
            this.setHorizontalScrollBarEnabled(false);
            this.setHorizontalFadingEdgeEnabled(false);
    
            mContainer = new LinearLayout(context);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    android.view.ViewGroup.LayoutParams.MATCH_PARENT,
                    android.view.ViewGroup.LayoutParams.MATCH_PARENT);
            mContainer.setLayoutParams(params);
            mContainer.setOrientation(LinearLayout.HORIZONTAL);
    
            addView(mContainer);
        }
    }
  2. 提供接口供调用者设置每个Tab的视图。

    public interface TabAdapter {
        /**
         * 每个Tab的视图
         */
        public View getView(int position);
        /**
         * Tab之间的分割线
         */
        public View getSeparator();
    }
  3. 暴露方法,初始化Tab。

    public void setTabAdapter(TabAdapter adapter) {
        this.mTabAdapter = adapter;
        initTabView();
    }
    
    public void setViewPager(ViewPager pager) {
        this.mViewPager = pager;
        mViewPager.setOnPageChangeListener(this);
        initTabView();
    }
    
    /**
     * 必须等到ViewPager和TabAdapter都设置完成后才可以调用
     */
    private void initTabView() {
        if (mViewPager != null && mTabAdapter != null) {
            //清空父布局,保险起见
            mContainer.removeAllViews();
            //根据ViewPager的页数去设置Tab
            for (int i = 0; i < mViewPager.getAdapter().getCount(); i++) {
                final View tab = mTabAdapter.getView(i);
                tab.setTag(i);
    
                mContainer.addView(tab);
    
                // Segmentation view
                if (mTabAdapter.getSeparator() != null
                        && i != mViewPager.getAdapter().getCount() - 1) {
                    //Tabs之间使用分割线
                    isUseSeperator = true;
                    mContainer.addView(mTabAdapter.getSeparator());
                }
    
                // 对每个Tab设置点击事件
                tab.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        int index = (Integer) tab.getTag();
                        if (mTabClickListener != null) {
                            //暴露接口
                            mTabClickListener.onClick(index);
                        } else {
                            if (mViewPager.getCurrentItem() == index) {
                                //如果当前ViewPager已经显示到了该Tab也,就直接让其选中
                                selectTab(index);
                            } else {
                                //当前ViewPager并没有显示该Tab页,要让ViewPager去显示相应的Tab页
                                mViewPager.setCurrentItem(index, true);
                            }
                        }
                    }
                });
    
            }
    
            // 初始化时核对一下Tab
            selectTab(mViewPager.getCurrentItem());
        }
    }
  4. selectTab的实现,选中相应的Tab,并且实现滑动到屏幕中间位置

    private void selectTab(int position) {
        if (!isUseSeperator) {
            //没有分割线
            for (int i = 0; i < mContainer.getChildCount(); i++) {
                View tab = mContainer.getChildAt(i);
                tab.setSelected(i == position);
            }
        } else {
            //有分割线
            for (int i = 0, pos = 0; i < mContainer.getChildCount(); i += 2, pos++) {
                View tab = mContainer.getChildAt(i);
                tab.setSelected(pos == position);
            }
        }
        //得到当前的Tab
        View selectedView = null;
        if (!isUseSeperator) {
            selectedView = mContainer.getChildAt(position);
        } else {
            selectedView = mContainer.getChildAt(position * 2);
        }
    
        int tabWidth = selectedView.getMeasuredWidth();
        int tabLeft = selectedView.getLeft();
    
        //距离左边屏幕的位置加上该Tab宽度的一半正好是该Tab中心点的位置。我们需要让该Tab的中心点移动到屏幕的中心点。
        int distance = (tabLeft + tabWidth / 2) - mWindowWidth / 2;
        //移动
        smoothScrollTo(distance, this.getScrollY());
    }

  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
Automatic-Scrolling-Tabs113.zip 谷歌插件自动滚动网页,网页到达底部能自动转换到下一标签,只需要切换插件状态即可,操作简单,看小说使用方便,不用一直手动翻 立即下载

相关推荐

自动滚动选项卡「Automatic Scrolling Tabs」-crx插件

此扩展程序会自动向下滚动到选项卡上,并在到达当前选项卡的底部时切换到下一个 :copyright:版权CyonTech.ca 这是Chrome的一个应用程序,此扩展程序会自动向下滚动到标签上,刷新下一个标签并在到达当前标签底部时切换到下一个标签。所有这些都是完全可定制的,下一个标签之前和刷新之后的延迟时间,以及页面末尾的时间。适合制作网站演示文稿。该应用程序可以随时打开或关闭。 支持语言:English

大屏html自动滚动,Automatic Scrolling Tabs - 网页自动滚屏

Automatic Scrolling Tabs插件背景简介最近有网友在网上提问求一个脱离鼠标仍可网页自动向下滚动,然后鼠标去操作其他东西的插件,最好能设置滚动速度的。之前我们会推荐一些鼠标手势插件来实现该功能。小编今天介绍一款chrome插件网的Automatic Scrolling Tabs插件。Automatic Scrolling Tabs插件简介Automatic Scrolling T...

weixin_36139228的博客 3362

自动滚屏「Auto Scroll」-crx插件

自动向下滚动当前网页 通过此chrome扩展程序,您只需单击一下按钮即可自动向下滚动页面。 此chrome扩展程序非常适合阅读您选择的任何网页。 支持语言:English

【亲测免费】 jQuery Bootstrap Scrolling Tabs 使用指南

jQuery Bootstrap Scrolling Tabs 使用指南 项目介绍 jQuery Bootstrap Scrolling Tabs 是一个为Bootstrap框架设计的插件,它允许你在导航标签(tabs)过多而无法在一个可视区域内全部展示时,实现垂直或水平的滚动功能。该插件自动调整以检测是否需要滚动,非常适合响应式设计,确保在不同屏幕尺寸下都能优雅显示。通过添加左右箭头来指示可滚...

gitblog_00541的博客 1032

Uibot RPA中级认证实战:手把手教你用流程创造者搞定客户数据迁移(附验证码容错技巧)

本文详细介绍了Uibot RPA中级认证实战中的客户数据迁移工程化解决方案,特别针对验证码容错技巧和动态表格处理等核心挑战。通过环境准备、登录模块设计、数据提取技术及容错体系的系统讲解,帮助RPA实施工程师掌握高效稳定的自动化流程开发方法,提升企业数据迁移效率。

weixin_30505225的博客 231

反激电源占空比为何必须小于0.5?次谐波振荡与斜坡补偿详解

在开关电源设计中,峰值电流模式控制因其优异的动态响应和逐周期限流保护而被广泛应用。其工作原理是通过采样电感电流的峰值,与误差电压比较来控制开关管的导通与关断。然而,这种控制方式在反激等隔离拓扑中,当占空比超过50%时,会面临一个固有的稳定性挑战——次谐波振荡。这是由于电流扰动会在相邻开关周期内被放大而非衰减,导致系统在开关频率一半处发生振荡,严重影响输出纹波和可靠性。为解决这一问题,工程上引入了斜坡补偿技术,通过向控制信号叠加一个固定斜率的斜坡,改变环路增益条件,从而在宽输入电压或高占空比需求下维持系统稳定

weixin_29631169的博客 630

【Material-UI】Tabs 组件中的 Scrollable Tabs 功能详解

Tabs 组件在 Web 应用程序中被广泛使用,它允许用户在多个内容面板间进行切换,而不需要加载新的页面。这对于那些需要展示大量信息,但又想保持界面简洁的场景非常适用。Tabs 组件可以提升信息的可达性,并减少用户的操作步骤。如果希望更加灵活地控制滚动按钮的样式,你可以通过 CSS 覆盖 Material-UI 的默认样式。一个常见的需求是让滚动按钮在被禁用时仍然保持可见。你可以通过调整opacity来实现这一点。这种方式可以确保用户在滚动按钮禁用时,仍然可以看到按钮并理解其状态。

lph159的博客 1605

【数据结构】汉诺塔问题(丰富图解)

经典汉诺塔问题,丰富图解,助你理解。

℉f的博客 4107

【Android】自定义ScrollingTabs结合ViewPager实现指引的效果

自定义ScrollingTabs结合ViewPager实现指引的效果。 原理: 由于ScrollingTabs既可以点击又可以实现左右滑动,首先想到的就是继承HorizontalScrollView来实现滑动,至于点击的实现需要通过对View设置点击。 通过对ViewPager设置OnPageChangeListener来监听页面变化,从而实现对ScrollingTabs的改变,而在每个T

succ 528

3A之自动对焦(AF)算法:从Tenegrad到拉普拉斯的清晰度评价实战

本文深入解析自动对焦(AF)算法的核心——清晰度评价函数,通过实战对比Tenegrad、方差、能量梯度、Brenner和拉普拉斯五大经典算法的原理、代码实现与性能。文章详细阐述了各函数在计算速度、抗噪性和单峰性上的优劣,并提供了从仿真测试到硬件部署的优化策略,帮助开发者根据实际场景选择最合适的AF算法。

weixin_29281915的博客 315

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4871

ExtJS 2.0 正式发布了

ExtJS 2.0 终于正式发布了,相对于1.1, ExtJS做了大量的更新,引用官方博客上的一句话,“Ext 2.0 is a dramatic step forward from all previous versions of Ext, providing increased performance, ease of configurations...

weixin_33816946的博客 154

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1426

jQuery Bootstrap Scrolling Tabs 项目常见问题解决方案

jQuery Bootstrap Scrolling Tabs 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 jQuery Bootstrap Scrolling Tabs 是一个开源项目,它提供了一个 jQuery 插件,用于使 Bootstrap 的标签页(Tabs)能够水平滚动而不是换行。这个插件特别适用于标签页数量较多,无法在一个屏幕上完整显示的情况。项目主要使用 JavaScr...

gitblog_00270的博客 441

PCL 快速均匀下采样

快速均匀下采样 是一种点云降采样技术,通过设置采样步长来实现等距降采样,从而减少点的数量。用户可以通过指定步长,选择每隔一定数量的点采样一个点,这样可以在保持点云几何特性的同时,显著减少点的数量。

纵马踏花向自由 871

PCL学习笔记(四)——点云曲面重建

文章目录一、凸包算法二、 单纯的点云数据固然很好,但仅仅是点的话仍是不够的,因为这不利于我们后续对实体对象的渲染与各种应用,如计算实体的表面积、体积等等,所以这就需要我们对实体进行点云的曲面重建。 一、凸包算法 在计算机图形学中,凸包是指在任意维空间中包含某一有限点集P的最小凸集,它由凸包顶点构成,在二维上其表现形式为一个凸多边形,而在三维上则表现为一个凸多面体。在二维层面上来讲,最常用的凸包算法有Graham扫描法和Jarvis卷包裹法,但前者并不适用于三维层面,后者倒是可以扩展到三维。除此之外,在

dayuhaitang1的博客 6912

App_Structure

不同的应用对于界面结构的需求是不同的。例如: 像计算器和相机应用,构建在一个主要的 Activity 上,这个单一的 Activity 处理各种操作像拨号应用,主要的是在几个不同的 Activity 中切换,没有很复杂的导航像 Gmail 和 Google 市场,包括了多个数据视图和复杂的浏览方式 您应用的结构主要由内容和展示给用户的功能决定。 基本结构 - General Struct

jinyp的专栏 737

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ActionBar样式需要改动framework的部分

1. ActionBar Tab模式的高度限制 默认是最大不超过48dp,超过无效。 ActionBar的TabView是放在ScrollingTabContainerView这个容器中的,在new这个类的时候会代码会设置高度 public ScrollingTabContainerView(Context context){ super(context); ... ActionBar

androiddeveloper的专栏 2384

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Android界面实现】使用ScrollingTabsView实现有滑动标签的ViewPager效果

转载请注明出处:http://blog.youkuaiyun.com/zhaokaiqiang1992     在前面的文章中,我们使用支持包里面的PagerTabStrip实现了有滑动标签的viewPager效果,今天,再给大家介绍另外一种开源项目,来实现类似的效果。     在这篇文章中,我们将使用第三方开源项目ViewPagerExtensions实现。     ViewPagerExtensio

赵凯强 4911

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android 底部tab效果,Android TabContainerView 实现底部导航栏效果 V1.0

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布xiaoguo.gif上图效果大家应该都很熟悉了,基本市面上的App都会用到这种布局效果,实现起来也很简单,就是上面一个ViewPager,下面一个线性布局TabContainerView就是把实现逻辑封装起来,让开发者可以通过更简单的代码实现这种布局效果,提高工作效率。使用TabContainerView tabContainer...

weixin_31303743的博客 266

Android中View的相关知识(5)

Android中View的相关知识(5)@(Android) 在上一篇的文章Android中View的相关知识(4)中,我们讲解了setContentView方法中getWindow().setContentView();方法,即创建content视图的过程,在本章节,我们继续往下走,探索initWindowDecorActionBar();看看ActionBar是如何创建的~: 接着分析ini

Mari0_0的博客 929

TabContainerView一一实现底部导航栏效果

今日科技快讯 昨日,京东集团宣布,为了更好的向全社会输出京东物流的专业能力,帮助产业链上下游的合作伙伴降低供应链成本、提升流通效率,将正式组建京东物流子集团。京东物流子集团将拥有更加独立的经营权和决策权,以科技创新打造智慧供应链的价值网络,并致力

郭霖 655

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 312
上一篇: Scroller简介
下一篇: Selector使用
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值