左右滑动的Tab

利用ViewPager实现可左右滑动的Action Tab 1. ViewPager要点: ViewPager 是一个布局管理类(layout manager),用于提供页面的左右滑动功能,类似于ListView,也有为ViewPager提供     数据(Fragment)的 adapter 控制类(FragmentPagerAdapter, FragmentStatePagerAdapter)。ViewPager 经常和 Fragment 一 阅读详情

. [文件] activity_main.ml 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:orientation = "vertical" >
 
     < LinearLayout
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content"
         android:gravity = "center"
         android:orientation = "horizontal"
         android:padding = "5dp" >
 
         < TextView
             android:id = "@+id/text1"
             android:layout_width = "fill_parent"
             android:layout_height = "fill_parent"
             android:layout_weight = "1.0"
             android:gravity = "center"
             android:text = "焦点推荐"
             android:textColor = "#000"
             android:textSize = "15dp" />
 
         < TextView
             android:id = "@+id/text2"
             android:layout_width = "fill_parent"
             android:layout_height = "fill_parent"
             android:layout_weight = "1.0"
             android:gravity = "center"
             android:text = "今日关注"
             android:textColor = "#000"
             android:textSize = "15dp" />
 
         < TextView
             android:id = "@+id/text3"
             android:layout_width = "fill_parent"
             android:layout_height = "fill_parent"
             android:layout_weight = "1.0"
             android:gravity = "center"
             android:text = "新闻资讯"
             android:textColor = "#000"
             android:textSize = "15dp" />
 
         < TextView
             android:id = "@+id/text4"
             android:layout_width = "fill_parent"
             android:layout_height = "fill_parent"
             android:layout_weight = "1.0"
             android:gravity = "center"
             android:text = "专题活动"
             android:textColor = "#000"
             android:textSize = "15dp" />
     </ LinearLayout >
 
     < ImageView
         android:id = "@+id/cursor"
         android:layout_width = "fill_parent"
         android:layout_height = "wrap_content"
         android:scaleType = "matrix"
         android:src = "@drawable/ic_xian_red" />
 
     < android.support.v4.view.ViewPager
         android:id = "@+id/tabpager"
         android:layout_width = "match_parent"
         android:layout_height = "0dp"
         android:layout_gravity = "center"
         android:layout_weight = "1" >
     </ android.support.v4.view.ViewPager >
 
</ LinearLayout >

2. [文件] MainActivity.java 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
package com.example.demo;
 
import java.util.ArrayList;
import java.util.List;
 
import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
 
public class MainActivity extends Activity {
     
     private ViewPager mViewPager; // 页卡内容
     private ImageView mImageView; // 动画图片
     private TextView tv1, tv2, tv3, tv4;
     private int offset = 0 ; // 动画图片偏移量
     private int currIndex = 0 ; // 当前页卡编号
     private int bmpWidth; // 动画图片宽度
     private View view1, view2, view3, view4; // 各个页卡
     LocalActivityManager mLocalActivityManager = null ;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         mLocalActivityManager = new LocalActivityManager( this , true );
         mLocalActivityManager.dispatchCreate(savedInstanceState);
         initImageView();
         initTextView();
         initViewPager();
     }
 
     private void initViewPager() {
         mViewPager = (ViewPager) findViewById(R.id.tabpager);
         List<View> views = new ArrayList<View>(); // Tab页面列表
         Intent intentA = new Intent(MainActivity. this , JDActivity. class );
         views.add(getView( "A" , intentA));
         Intent intentB = new Intent(MainActivity. this , JRActivity. class );
         views.add(getView( "B" , intentB));
         Intent intentC = new Intent(MainActivity. this , XWActivity. class );
         views.add(getView( "C" , intentC));
         Intent intentD = new Intent(MainActivity. this , ZTActivity. class );
         views.add(getView( "D" , intentD));
         mViewPager.setAdapter( new TabViewPagerAdapter(views));
         mViewPager.setCurrentItem( 0 );
         mViewPager.setOnPageChangeListener( new MyOnPageChangeListener());
     }
 
     /**
      * 通过activity获取视图
      *
      */
     private View getView(String id, Intent intent) {
         return mLocalActivityManager.startActivity(id, intent).getDecorView();
     }
 
     /**
      * 初始化头标
      */
 
     private void initTextView() {
         tv1 = (TextView) findViewById(R.id.text1);
         tv2 = (TextView) findViewById(R.id.text2);
         tv3 = (TextView) findViewById(R.id.text3);
         tv4 = (TextView) findViewById(R.id.text4);
         tv1.setOnClickListener( new TabOnClickListener( 0 ));
         tv2.setOnClickListener( new TabOnClickListener( 1 ));
         tv3.setOnClickListener( new TabOnClickListener( 2 ));
         tv4.setOnClickListener( new TabOnClickListener( 3 ));
     }
 
     /**
      * 初始化动画
      */
 
     private void initImageView() {
         mImageView = (ImageView) findViewById(R.id.cursor);
         bmpWidth = BitmapFactory.decodeResource(getResources(),
                 R.drawable.ic_xian_red).getWidth(); // 获取图片宽度
         DisplayMetrics dm = new DisplayMetrics();
         getWindowManager().getDefaultDisplay().getMetrics(dm);
         int screenW = dm.widthPixels; // 获取分辨率宽度
         offset = (screenW / 4 - bmpWidth) / 2 ; // 计算偏移量
         Matrix matrix = new Matrix();
         matrix.postTranslate(offset, 0 );
         mImageView.setImageMatrix(matrix); // 设置动画初始位置
     }
 
     /**
      *
      * 头标点击监听
      */
     private class TabOnClickListener implements OnClickListener {
         private int index = 0 ;
 
         public TabOnClickListener( int i) {
             index = i;
         }
 
         public void onClick(View v) {
             mViewPager.setCurrentItem(index);
         }
 
     }
 
     public class TabViewPagerAdapter extends PagerAdapter {
         private List<View> mListViews;
 
         public TabViewPagerAdapter(List<View> mListViews) {
             this .mListViews = mListViews;
         }
 
         @Override
         public void destroyItem(ViewGroup container, int position, Object object) {
             container.removeView(mListViews.get(position));
         }
 
         @Override
         public Object instantiateItem(ViewGroup container, int position) {
             container.addView(mListViews.get(position), 0 );
             return mListViews.get(position);
         }
 
         @Override
         public int getCount() {
             return mListViews.size();
         }
 
         @Override
         public boolean isViewFromObject(View arg0, Object arg1) {
             return arg0 == arg1;
         }
     }
 
     public class MyOnPageChangeListener implements OnPageChangeListener {
 
         int one = offset * 2 + bmpWidth; // 页卡1 -> 页卡2 偏移量
         int two = one * 2 ; // 页卡1 -> 页卡3 偏移量
 
         public void onPageScrollStateChanged( int arg0) {
 
         }
 
         public void onPageScrolled( int arg0, float arg1, int arg2) {
 
         }
 
         public void onPageSelected( int arg0) {
             Animation animation = null ;
             switch (arg0) {
             case 0 :
                 Log.d( "TAG" , "0" );
                 tv1.setTextColor(Color.RED);
                 tv2.setTextColor(Color.BLACK);
                 tv3.setTextColor(Color.BLACK);
                 tv4.setTextColor(Color.BLACK);
                 break ;
             case 1 :
                 Log.d( "TAG" , "1" );
                 tv1.setTextColor(Color.BLACK);
                 tv2.setTextColor(Color.RED);
                 tv3.setTextColor(Color.BLACK);
                 tv4.setTextColor(Color.BLACK);
                 break ;
             case 2 :
                 Log.d( "TAG" , "2" );
                 tv1.setTextColor(Color.BLACK);
                 tv2.setTextColor(Color.BLACK);
                 tv3.setTextColor(Color.RED);
                 tv4.setTextColor(Color.BLACK);
                 break ;
             case 3 :
                 Log.d( "TAG" , "3" );
                 tv1.setTextColor(Color.BLACK);
                 tv2.setTextColor(Color.BLACK);
                 tv3.setTextColor(Color.BLACK);
                 tv4.setTextColor(Color.RED);
                 break ;
             }
             animation = new TranslateAnimation(one * currIndex, one * arg0, 0 ,
                     0 );
             currIndex = arg0;
             animation.setFillAfter( true ); // True:图片停在动画结束位置
             animation.setDuration( 100 );
             mImageView.startAnimation(animation);
             Log.d( "ReDianActivity:" , "您选择了" + mViewPager.getCurrentItem()
                     + "页卡" );
         }
     }
}

关于iOS tab吸顶之后不能左右滑动的问题 之前写项目的时候遇到过一个问题,使用position: sticky;实现tab吸顶效果,tabs超出屏幕可以左右滑动,在安卓和iOS一些版本上都可以,但是在iOS12.5.2上会出现一些问题 样式类似于这样 tab吸顶之后,就不能左右滑动了,后面检查代码,发现问题出现在css上,实现tab左右滑动效果使用的是,父元素设置 display: flex; overflow-x: auto; 子元素设置 min-width: px2rem(160); 后面把父元素的样式改成这样就可以了 display: 阅读详情

相关推荐

react-native 头部tab切换可以实现滑动切换功能

【代码】react-native 头部tab切换可以实现滑动切换功能。

九段刀客的博客 1035

【css js vue】超详细!!实现 tab菜单 动态滑动效果

最近产品经理给我提了个新需求,希望能实现tab菜单切换时的滑动效果。上面这是我做的效果图,在查找了一些资料之后,发现实现起来并没有特别的麻烦,但是对于我这种CSS学的不是很好的人,前期看起来还是有点懵的,所以写篇文章记录下我最终实现的效果。提示:以下是本篇文章正文内容,下面案例可供参考我讲述的应该是比较详细了,相信大家看了应该也能实现滑动功能。但是有一些内容我感觉写的比较繁琐,比如 每次切换的时候,也许聪明的你能用js函数实现left值的改变。大家一起加油。

Youweretrouble的博客 4689

tab滑动效果

tab滑动效果

微信小程序滚动Tab选项卡:左右滑动切换、触底加载分页

文章目录效果图一、顶部标签栏二、列表内容部分swiper组件高度及上下滚动样式三、数据结构及赋值方法四、scroll组件触底事件(分页相关五、scroll组件的高度样式swiper组件scroll组件样式区别六、其他 效果图 一、顶部标签栏 定位顶部便签栏,使用color-ui的组件样式实现 <scroll-view scroll-x class="bg-white nav my-...

kingAn123的博客 9633

HTML实现的Tab切换效果,点击滑动和触控滑动(SlideTouch插件)

HTML实现的Tab切换效果,点击滑动和触控滑动(SlideTouch插件),资源里面是源码!

可滚动切换的Tab页面

采用主流的Fragement+ViewPager配以TabLayout搭建的可滚动的Tab切换主界面,可以直接拿到项目中使用的简单demo。

tab标签栏横向滑动的实现

绝绝子,虽然很菜,纠结了有些时间,但是总结出来了 ^ ^ js的封装函数 function(id,setting){ var $box=$("#"+id); setting=$.extend({ tabData:[] },setting) $box.append(`<div class="gdp_tapTop"><ul class="gdp_tabTitle"></ul></div><div class="gdp_tabContent"

enhenglhm的博客 1538

手机端 可滑动切换tab选项卡

[removed] $(function() { function setCurrentSlide(ele, index) { $(".swiper1 .swiper-slide").removeClass("selected"); ele.addClass("selected"); //swiper1.initialSlide=index; } var swiper1 = new Swiper('.swiper1', { // 设置slider容器能够同时显示的slides数量(carousel模式)。 // 可以设置为number或者 'auto'则自动根据slides的宽度来设定数量。 // loop模式下如果设置为'auto'还需要设置另外一个参数loopedSlides。 slidesPerView: 5.5, paginationClickable: true,//此参数设置为true时,点击分页器的指示点分页器会控制Swiper切换。 spaceBetween: 10,//slide之间的距离(单位px)。 freeMode: true,//默认为false,普通模式:slide滑动时只滑动一格,并自动贴合wrapper,设置为true则变为free模式,slide会根据惯性滑动且不会贴合。 loop: false,//是否可循环 onTab: function(swiper) { var n = swiper1.clickedIndex; } }); swiper1.slides.each(function(index, val) { var ele = $(this); ele.on("click", function() { setCurrentSlide(ele, index); swiper2.slideTo(index, 500, false); //mySwiper.initialSlide=index; }); }); var swiper2 = new Swiper('.swiper2', { //freeModeSticky 设置为true 滑动会自动贴合 direction: 'horizontal',//Slides的滑动方向,可设置水平(horizontal)或垂直(vertical)。 loop: false, // effect : 'fade',//淡入 //effect : 'cube',//方块 //effect : 'coverflow',//3D流 // effect : 'flip',//3D翻转 autoHeight: true,//自动高度。设置为true时,wrapper和container会随着当前slide的高度而发生变化。 onSlideChangeEnd: function(swiper) { //回调函数,swiper从一个slide过渡到另一个slide结束时执行。 var n = swiper.activeIndex; setCurrentSlide($(".swiper1 .swiper-slide").eq(n), n); swiper1.slideTo(n, 500, false); } }); }); [removed]

apicloud+aui 类似京东左右滑动切换页面,顶部tab栏跟随切换

一、类似京东,左右滑动切换页面,实现以下功能: 左右滑动页面直接切换,顶部tab栏也切换到对应位置。 点击顶部tab栏按钮,切换按钮并切换页面。 二、实现的效果如下: 三、页面组成: api.openFrameGroup() ,可以将要左右切换的区域拆分为多个页面(下图红色区域),用api.openFrameGroup()来打开,此方法实现左右滑动页面的效果。 // 打开页面...

zhaokei的博客 4727

JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)

主要介绍了JS实现滑动菜单效果代码,以实例形式实现了包括Tab,选项卡,横向等效果,非常简单实用,需要的朋友可以参考下

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

html实现tab 左右滑动

左右滑动 切换tab 并且给对应的tab加上样式 请求对应的数据 这里我是用swiper实现的 swiper的官网 下面直接上代码了 <div class="myIndentNav_div"> <ul class="myIndentNav"> <li class="active" data-id = "all">全部<span></span></li> <li data-id="0">待付款<span&gt.

Mr_wuying的博客 5470

autodl云服务器使用中的conda源报错

通过find path -name filename找到.condarc文件,在autodl服务器中,一般在/root/.condarc。为了利用jypyter打开conda虚拟环境运行,需要下载ipykenel。这个报错是源的问题,在通过源获取包元数据时出现了HTTP 429错误。通过conda换源解决。修改.condarc文件,命令: vim .condarc。但这样还不能解决问题,得把报错中有问题的源注释掉。通过以下命令添加清华镜像源。把报错的链接源注释如下。

Ty_kilig的博客 1584

Taro实现 微信小程序 可左右滑动切换的Tab组件

######2、BgTitleTouchGroup.less 3、BgTitleTouchItem.vue 4、BgTitleTouchItem.less ######5、announcement.vue

fth1002853070的博客 2016

在RStudio中使用GitHub Copilot:代码自动生成,从此告别手敲!

可以通过自定义提示词来引导Copilot生成符合自己需求的代码。再看一个做统计分析的。

Codewar的博客 330

【安卓逆向】python版本 sha源码

免责声明本文内容仅供学习交流使用,严禁用于商业和非法用途。抓包数据、敏感网址以及数据接口已进行脱敏处理。 注:如有引用,请标注文章地址!!!!!!!

Coodekun的博客 816

打开多tab出现左右滑动按钮

当打开多个tab时,出现左右滑动按钮,并可以左右滑动tab。 html代码: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www....

liushuiziyouliu的专栏 2633

会话管理技巧——如何优化OpenClaw的上下文理解能力(2026进阶版)

本文深入探讨了OpenClaw系统的会话管理技术,重点介绍了会话定义、生命周期管理和上下文优化策略。会话管理包含会话ID、用户信息、状态等核心要素,以及创建、维护、终止和恢复四个生命周期阶段。上下文管理通过ContextManager类实现,支持创建、更新、消息添加和变量管理等功能,并采用历史记录机制确保会话连续性。ContextOptimizer类则负责应用优化规则,通过消息和变量压缩等技术提升系统性能。这些技术共同构建了OpenClaw强大的会话管理能力,为AI助手提供了高质量的交互体验基础。

博客 490

框架,底部tab,可以左右滑动,内嵌tab

框架,底部tab,可以左右滑动,内嵌tab

xfchenlei的专栏 237

Xilinx_JESD204B

Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号

Crazzy_M的博客 1万+

9.27华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

9.26华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

算法大师! 486

自己对于android左右滑动切换tab或者任务的复制

首先感谢下我看到的那篇文章作者 当然不记得名字了 对不住了 要实现左右滑动来切换tab或者任务 分别继承了TabActivity或者Activity 然后自己实现OnTouchListener, OnGestureListener这两个接口 介绍重点函数: public boolean onTouch(View v, MotionEvent event) { // TODO Auto

Amule的专栏 3131

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

uniapp 左右滑动切换Tab

各种开发会遇到很多奇葩的需求,今天这个是在页面 左右滑动,然后自动去切换Tab。

qq_38866594的博客 602

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue实现tab导航栏,支持左右滑动

本文主要介绍:利用Vue实现tab导航栏,并且通过flex布局实现左右滑动,计算按钮的位置,当点击第一屏展示的最后一个且还有元素未展示时,自动滑动显示出未显示的元素。 tab导航栏布局: <section class="theme-list"> <div class="fixed-nav" ref="fixednav"> <div class="fixed-nav-content"> <p v-for="(item, inde

愿历尽千帆,仍保持最初的热爱,奔赴每一场山海,一如既往鲜活而明亮~ 9066

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ActionBar + ViewPager实现左右滑动切换Tab页效果

废话不多说,先上一张效果图。

wh109310的专栏 1184
上一篇: Android自定义对话框实现以及style的应用
下一篇: mysql如何创建数据库、创建表
qq_16630121
博客等级 码龄12年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值