Android Tab页面手势滑动切换以及动画效果

Android滑动切换tab(切换带动画) 立即下载

一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,

白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。

Android Tab页面手势滑动切换以及动画效果

 

二、在开始前,我们先要认识一个控件,ViewPager。它是是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。

这个附加包是android-support-v4.jar,在最后的源码中会提供给大家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。

找到它后,我们需要在项目中添加

Android Tab页面手势滑动切换以及动画效果

 

三、我们先做界面,

界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03     xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus"
04     android:layout_width="fill_parent"
05     android:layout_height="fill_parent"
06     android:orientation="vertical" >
07  
08     <LinearLayout
09         android:id="@+id/linearLayout1"
10         android:layout_width="fill_parent"
11         android:layout_height="100.0dip"
12         android:background="#FFFFFF" >
13  
14         <TextView
15             android:id="@+id/text1"
16             android:layout_width="fill_parent"
17             android:layout_height="fill_parent"
18             android:layout_weight="1.0"
19             android:gravity="center"
20             android:text="页卡1"
21             android:textColor="#000000"
22             android:textSize="22.0dip" />
23  
24         <TextView
25             android:id="@+id/text2"
26             android:layout_width="fill_parent"
27             android:layout_height="fill_parent"
28             android:layout_weight="1.0"
29             android:gravity="center"
30             android:text="页卡2"
31             android:textColor="#000000"
32             android:textSize="22.0dip" />
33  
34         <TextView
35             android:id="@+id/text3"
36             android:layout_width="fill_parent"
37             android:layout_height="fill_parent"
38             android:layout_weight="1.0"
39             android:gravity="center"
40             android:text="页卡3"
41             android:textColor="#000000"
42             android:textSize="22.0dip" />
43     </LinearLayout>
44  
45     <ImageView
46         android:id="@+id/cursor"
47         android:layout_width="fill_parent"
48         android:layout_height="wrap_content"
49         android:scaleType="matrix"
50         android:src="@drawable/a" />
51  
52     <android.support.v4.view.ViewPager
53         android:id="@+id/vPager"
54         android:layout_width="wrap_content"
55         android:layout_height="wrap_content"
56         android:layout_gravity="center"
57         android:layout_weight="1.0"
58         android:background="#000000"
59         android:flipInterval="30"
60         android:persistentDrawingCache="animation" />
61  
62 </LinearLayout>

我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。

1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent"
5     android:orientation="vertical"
6     android:background="#158684" >
7 </LinearLayout>

四、代码部分要进行初始化的工作

(1) 先来变量的定义

1 private ViewPager mPager;//页卡内容
2     private List<View> listViews; // Tab页面列表
3     private ImageView cursor;// 动画图片
4     private TextView t1, t2, t3;// 页卡头标
5     private int offset = 0;// 动画图片偏移量
6     private int currIndex = 0;// 当前页卡编号
7     private int bmpW;// 动画图片宽度
(2) 初始化头标
01 /**
02       * 初始化头标
03  */
04      private void InitTextView() {
05          t1 = (TextView) findViewById(R.id.text1);
06          t2 = (TextView) findViewById(R.id.text2);
07          t3 = (TextView) findViewById(R.id.text3);
08   
09          t1.setOnClickListener(new MyOnClickListener(0));
10          t2.setOnClickListener(new MyOnClickListener(1));
11          t3.setOnClickListener(new MyOnClickListener(2));
12      }
01 /**
02       * 头标点击监听
03  */
04      public class MyOnClickListener implements View.OnClickListener {
05          private int index = 0;
06   
07          public MyOnClickListener(int i) {
08              index = i;
09          }
10   
11          @Override
12          public void onClick(View v) {
13              mPager.setCurrentItem(index);
14          }
15      };

相信大家看后都没什么问题,点击第几个,就展示第几个页卡内容。

 

(3) 初始化页卡内容区

01 /**
02       * 初始化ViewPager
03  */
04      private void InitViewPager() {
05          mPager = (ViewPager) findViewById(R.id.vPager);
06          listViews = new ArrayList<View>();
07          LayoutInflater mInflater = getLayoutInflater();
08          listViews.add(mInflater.inflate(R.layout.lay1, null));
09          listViews.add(mInflater.inflate(R.layout.lay2, null));
10          listViews.add(mInflater.inflate(R.layout.lay3, null));
11          mPager.setAdapter(new MyPagerAdapter(listViews));
12          mPager.setCurrentItem(0);
13          mPager.setOnPageChangeListener(new MyOnPageChangeListener());
14      }

我们将三个页卡界面装入其中,默认显示第一个页卡。这里我们还需要实现一个适配器。

01 /**
02       * ViewPager适配器
03  */
04      public class MyPagerAdapter extends PagerAdapter {
05          public List<View> mListViews;
06   
07          public MyPagerAdapter(List<View> mListViews) {
08              this.mListViews = mListViews;
09          }
10   
11          @Override
12          public void destroyItem(View arg0, int arg1, Object arg2) {
13              ((ViewPager) arg0).removeView(mListViews.get(arg1));
14          }
15   
16          @Override
17          public void finishUpdate(View arg0) {
18          }
19   
20          @Override
21          public int getCount() {
22              return mListViews.size();
23          }
24   
25          @Override
26          public Object instantiateItem(View arg0, int arg1) {
27              ((ViewPager) arg0).addView(mListViews.get(arg1), 0);
28              return mListViews.get(arg1);
29          }
30   
31          @Override
32          public boolean isViewFromObject(View arg0, Object arg1) {
33              return arg0 == (arg1);
34          }
35   
36          @Override
37          public void restoreState(Parcelable arg0, ClassLoader arg1) {
38          }
39   
40          @Override
41          public Parcelable saveState() {
42              return null;
43          }
44   
45          @Override
46          public void startUpdate(View arg0) {
47          }
48      }

这里我们实现了各页卡的装入和卸载

(3) 初始化动画

01 /**
02       * 初始化动画
03  */
04      private void InitImageView() {
05          cursor = (ImageView) findViewById(R.id.cursor);
06          bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)
07                  .getWidth();// 获取图片宽度
08          DisplayMetrics dm = new DisplayMetrics();
09          getWindowManager().getDefaultDisplay().getMetrics(dm);
10          int screenW = dm.widthPixels;// 获取分辨率宽度
11          offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
12          Matrix matrix = new Matrix();
13          matrix.postTranslate(offset, 0);
14          cursor.setImageMatrix(matrix);// 设置动画初始位置
15      }

根据屏幕的分辨率和图片的宽度计算动画移动的偏移量

实现页卡切换监听

01 /**
02       * 页卡切换监听
03  */
04      public class MyOnPageChangeListener implements OnPageChangeListener {
05   
06          int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
07          int two = one * 2;// 页卡1 -> 页卡3 偏移量
08   
09          @Override
10          public void onPageSelected(int arg0) {
11              Animation animation = null;
12              switch (arg0) {
13              case 0:
14                  if (currIndex == 1) {
15                      animation = new TranslateAnimation(one, 0, 0, 0);
16                  } else if (currIndex == 2) {
17                      animation = new TranslateAnimation(two, 0, 0, 0);
18                  }
19                  break;
20              case 1:
21                  if (currIndex == 0) {
22                      animation = new TranslateAnimation(offset, one, 0, 0);
23                  } else if (currIndex == 2) {
24                      animation = new TranslateAnimation(two, one, 0, 0);
25                  }
26                  break;
27              case 2:
28                  if (currIndex == 0) {
29                      animation = new TranslateAnimation(offset, two, 0, 0);
30                  } else if (currIndex == 1) {
31                      animation = new TranslateAnimation(one, two, 0, 0);
32                  }
33                  break;
34              }
35              currIndex = arg0;
36              animation.setFillAfter(true);// True:图片停在动画结束位置
37              animation.setDuration(300);
38              cursor.startAnimation(animation);
39          }
40   
41          @Override
42          public void onPageScrolled(int arg0, float arg1, int arg2) {
43          }
44   
45          @Override
46          public void onPageScrollStateChanged(int arg0) {
47          }
48      }

五、打完收工,快来看看自己的劳动成果吧


源码分享 : http://115.com/file/dpi0unyg
转自:http://www.cnblogs.com/dwinter/archive/2012/02/27/2369590.html
android viewpager各种滑动动画 一款android viewpager 自定义滑动动画效果,很多种效果有你想要的,还可以理解之后自己写出自己想要的效果,很简单,调用就一段代码,不影响性能 立即下载

相关推荐

Android源码——fleep滑动切换tab(切换带动画)_new_06.zip

Android源码——fleep滑动切换tab(切换带动画)_new_06.zip

Android动画全篇系列(十二)——ViewPager滑动动画

文章目录一、前言二、实现1、参数的介绍2、实现三、ViewPager2四、小结 一、前言 ViewPager的作用很多,一般会结合Fragment来构成能左右滑动的视图结构。ViewPager还能够撸成一个Banner轮播图,只需要自定义一个PageAdapter即可。 当我们将ViewPager与Fragment相结合,我们不需要太多花里胡哨的滑动效果,简单的左右滑动就能够满足我们的要求。 而V...

catzifeng的博客 2028

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

android 指示器平移动画,EasyIndicator一款简易tab 切换指示器,带平移动画效果,可适用于ViewPage或普通View下。...

一款简单的tab指示器,带平移动画效果,代码简单可配置各种tab切换样式,用得着的朋友希望点个star使用方法:app:indicator_bottom_height="" 底部指示器高度app:indicator_bottom_line_color="" 底部线条颜色app:indicator_bottom_line_height="" 底部线条高度app:indicator_width="" ...

weixin_30715739的博客 753

C++总结笔记

/ ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。

weixin_50890461的博客 5236

STM32开发者必看:如何在正点原子探索者开发板上快速移植CANopenNode协议栈

本文为STM32开发者提供了在正点原子探索者开发板上快速移植CANopenNode协议栈的实战指南。文章详细介绍了从环境准备、硬件抽象层适配到协议栈初始化与测试的全过程,并分享了PDO配置与性能优化等关键技巧,帮助开发者高效实现CANopen标准化通信。

weixin_29173777的博客 465

android tab滑动动画,Tab页面手势滑动切换以及动画效果

。 3张页卡之间的切换。带动画效果。工程结构。主要应用到android-support-v4.jar这个jar包。布局文件。1、main.xml中的代码[html]xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus"android:layout_width="fill_parent"android:layout_height...

weixin_35172715的博客 806

PX4 磁罗盘干扰分析

无人机上的电机电流会干扰无人机上搭载的磁罗盘,PX4官方提供了一些方式,通过分析飞行日志,判断电机是否对磁罗盘有严重影响。

Zecet的博客 3359

android tab 换页动画

http://www.2cto.com/kf/201208/148253.html   **  * Tab页面手势滑动切换以及动画效果  *  */ public class MainActivity extends Activity {     // ViewPager是google SDk中自带的一个附加包的一个类,可以用来实现屏 幕间的切换。     // andr

909

基于Simulink的单级式光伏并网系统MPPT控制仿真

本文基于Simulink平台,详细介绍了单级式光伏并网系统的MPPT控制仿真实现。主要内容包括:1)阐述MPPT作为光伏系统"智能大脑"的核心作用;2)解析单级式系统架构及扰动观察法(P&O)算法原理;3)以10kW户用系统为例,分步骤演示建模过程,包括光伏阵列搭建、P&O控制器实现(含MATLAB代码)、并网控制设计等;4)通过仿真验证系统在光照突变下的动态响应性能,MPPT效率达98.3%。文章还提出了变步长P&O等优化方向,为光伏系统仿真与控制提供实用指导。

xiaoheshang_123的博客 113

激光雷达点云配准:ICP与NDT算法详解

激光雷达点云配准:ICP与NDT算法详解​ ,人工智能,计算机视觉,大模型,AI,本文深入解析激光雷达点云配准的ICP与NDT算法。阐述了点云配准基础概念与评价指标,详解ICP算法原理、流程、最优变换矩阵计算、优缺点及改进版,给出Python代码示例;同样解析NDT算法的原理、流程、模型构建、优缺点、参数选择与代码示例。还对比两者在精度、效率、鲁棒性和适用场景的差异,提供算法选择建议,介绍实际应用案例、常见问题及解决方法,探讨算法发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

Android左右滑动切换页面

package com.demo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle;

java/android相关技术的学习 1万+

【2025CSPJ普及组】T4. 多边形

【2025CSPJ普及组】T4. 多边形【题目描述】小 R 喜欢玩小木棍。小 R 有 n 根小木棍,第i(1≤i≤n) 根小木棍的长度为 ai。

lybc2019的博客 850

代码积累2----tab页面滑动效果

效果如图:代码:package com.demo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.os.Bundle;impo

alaric's blog 853

大模型——Ollama简明教程

在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——

1701

efm32 入门.pdf

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

tabhost通过手势滑动切换activity

public class Main extends TabActivity { private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = ...

jykenan的专栏 133

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android TabHost

新浪微博布局学习——妙用TabHost http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html [分享]Tab页面手势滑动切换以及动画效果 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=157855&fromuid=511991 仿Android4.0左

学习记录 1048

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android TabHost Demo

新浪微博布局学习——妙用TabHost http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html [分享]Tab页面手势滑动切换以及动画效果 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=157855&fromuid=511991 仿Android

赠人玫瑰,手留余香. 1748

android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...

====================问题描述==================== main.xml代码:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/and...

weixin_30642267的博客 193

android多页面滑动切换

Android ViewPager多页面滑动切换以及动画效果 一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式, 白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。   二、在开始前,我们先要认识一个控件,ViewPager。它是goog

hellohanlu的专栏 1383

Android——ViewPager多页面滑动切换以及动画效果

一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。    二、在开始前,我们先要认识一个控件,ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是android-

安源 608
上一篇: Android:将View的内容映射成Bitmap
下一篇: Android progressBar 自定义
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值