`

android Tab和ViewPager结合的例子

 
阅读更多
package com.test.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
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.view.LayoutInflater;
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;
import android.widget.Toast;

import com.test.R;

public class TabActivity extends Activity {

	private ViewPager viewPager;// 可滑动的页卡内容,也就是我们主要练习的目标
	private ImageView imageView;// 类似游标的动画图片,这个就是那个左右滑动的小滑块
	private TextView textView1, textView2, textView3;
	private List<View> views;// 页面列表
	private int offset = 0;// 游标移动的偏移量
	private int currentIndex = 0;// 当前页面号码
	private int bmpW;// 游标宽度
	private View view1, view2, view3;// 各个页面卡片

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tab);
		InitImageView();
		InitTextView();
		InitViewPager();
	}
	@SuppressWarnings("all")
	private void InitViewPager() {
		viewPager = (ViewPager) findViewById(R.id.vPager);
		views = new ArrayList<View>();
		LayoutInflater inflater = getLayoutInflater();// 这个在我前面写的几篇里面有介绍Inflater
		view1 = inflater.inflate(R.layout.lay1, null);
		view2 = inflater.inflate(R.layout.lay2, null);
		view3 = inflater.inflate(R.layout.lay3, null);
		views.add(view1);
		views.add(view2);
		views.add(view3);
		// ViewPager跟ListView一样,也需要一个适配器,后面对PagerAdapter进行重写
		viewPager.setAdapter(new MyViewPagerAdapter(views));
		// 默认显示第一个卡片页
		viewPager.setCurrentItem(0);
		// 给ViewPager加监听器
		viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
	}

	private void InitTextView() {
		textView1 = (TextView) findViewById(R.id.tt1);
		textView2 = (TextView) findViewById(R.id.tt2);
		textView3 = (TextView) findViewById(R.id.tt3);
		textView1.setOnClickListener(new MyOnClickLis(0));
		textView2.setOnClickListener(new MyOnClickLis(1));
		textView3.setOnClickListener(new MyOnClickLis(2));// 这些监听器保证在点击头部的标签时候页面也能滑动
	}

	private void InitImageView() {
		imageView = (ImageView) findViewById(R.id.cursor);
		bmpW = imageView.getWidth();
		DisplayMetrics displayMetrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
		int screen = displayMetrics.widthPixels;
		// 这个地方就是给每个标签左右各留出一块offset,共3个标签,6个offset,
		offset = (screen - bmpW * 40) / 6;
		Matrix matrix = new Matrix();
		// 向右平移
		matrix.postTranslate(offset, 0);
		// 对图片进行平移操作
		imageView.setImageMatrix(matrix);
	}

	private class MyOnClickLis implements OnClickListener {
		private int index;

		public MyOnClickLis(int index) {// 注意,这里的监听器有一个默认的带参数的构造器,用来确定你点击的是哪一个标签
			this.index = index;
		}

		@Override
		public void onClick(View v) {
			viewPager.setCurrentItem(index);
		}
	}

	// 下面是比较重点的了,就是之前提到过的重写PagerAdapter,重写时候我们至少需要重写一下4个方法,当然这里我们也只写了这4个方法.
	public class MyViewPagerAdapter extends PagerAdapter {
		private List<View> mListView;

		public MyViewPagerAdapter(List<View> views) {
			this.mListView = views;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(mListView.get(position));
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(mListView.get(position));
			return mListView.get(position);
		}

		@Override
		public int getCount() {
			return mListView.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

	}

	public class MyOnPageChangeListener implements OnPageChangeListener {
		int one = offset * 2 + bmpW;// 卡片1 --> 卡片2 偏移量
		int two = one * 2;// 卡片2 --> 卡片3 偏移量
		
		@Override
		public void onPageScrollStateChanged(int arg0) {
			// arg0 ==1的时候表示正在滑动,arg0==2的时候表示滑动完毕了,arg0==0的时候表示什么都没做,就是停在那。
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// 表示在前一个页面滑动到后一个页面的时候,在前一个页面滑动前调用的方法
		}

		@Override
		public void onPageSelected(int position) {
			
			// 左右移动动画
			Animation animation = new TranslateAnimation(one * currentIndex,
					one * position, 0, 0);
			currentIndex = position;
			// 图片停留在动画结束的位置
			animation.setFillAfter(true);
			animation.setDuration(100);
			imageView.startAnimation(animation);
			Toast.makeText(TabActivity.this, "卡片移向了第" + position + "页",
					Toast.LENGTH_SHORT).show();
			
		}
	}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    通过TabLayout和ViewPager实现Tab切换

    在Android应用开发中,创建一个具有Tab切换功能的界面是一个常见的需求。...通过学习和实践这个例子,你应该能够熟练地在自己的应用中集成`TabLayout`和`ViewPager`,创建出美观且功能丰富的Tab切换界面。

    xamarin android viewpager例子

    在这个“xamarin android viewpager例子”中,我们将探讨ViewPager的基本用法以及如何结合PageTabStrip和PageTitleStrip进行更高级的应用。 **ViewPager基本用法** ViewPager本身不直接显示内容,而是依赖于适配器...

    Android viewpager+listview例子

    总的来说,`Android viewpager+listview例子`是一个很好的实践项目,它涵盖了Android UI设计中的关键组件和交互方式。通过学习和实践这个例子,开发者不仅可以掌握如何使用`ViewPager`和`ListView`,还能深入理解...

    Android viewpager 简单实例

    在Android开发中,ViewPager是一个非常重要的组件,常用于创建滑动页面效果,它允许用户左右滑动页面来浏览多个视图。...通过这个简单的实例,开发者能够快速理解和掌握在Android应用中使用ViewPager的基本步骤。

    android ActionBarTabs+ViewPager+Fragment 实现tab滑动翻页效果

    总的来说,`ActionBarTabs`、`ViewPager`和`Fragment`的结合使用是Android开发中实现可滑动Tab页的一种高效方法,它不仅提供了良好的用户体验,也方便了代码组织和维护。通过学习和实践`Support13Demos`中的示例,...

    android中ViewPager简单实例

    在Android开发中,ViewPager是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者创建类似相册的效果。本实例将详细介绍如何在Android应用中使用ViewPager实现一个简单的滑动切换...

    ViewPager 的多个使用场景的Demo 欢迎页 循环 tab内嵌套

    3. **Tab内嵌套ViewPager**:在`TabViewPager嵌套ViewPage.zip`里,示例可能展示了如何在一个TabLayout中嵌套多个ViewPager,实现每个Tab都有独立的页面滑动效果。这种情况下,通常会使用`TabLayout`与`ViewPager`的...

    Android例子源码ViewPager手动滑动和自动滑动无限循环滑动加载.zip

    这个"Android例子源码ViewPager手动滑动和自动滑动无限循环滑动加载.zip"的压缩包提供了一个具体的实现示例,帮助开发者理解和学习如何在ViewPager中实现手动滑动、自动滑动以及无限循环滑动加载的功能。 首先,...

    简单新手向的ViewPager的例子

    这个"简单新手向的ViewPager例子"(ViewPagerDemo)是一个非常适合初学者入门的教程项目。下面将详细介绍ViewPager的基本概念、使用方法以及在实际应用中的常见技巧。 **1. ViewPager的基本概念** ViewPager是...

    Android中TabLayout+ViewPager实现tab和页面联动效果

    通过将TabLayout和ViewPager结合使用,可以实现tab和页面的联动效果,本文将详细介绍该实现方法。 首先,需要在布局文件中添加TabLayout和ViewPager控件。TabLayout用于显示标签页,ViewPager用于显示页面内容。...

    ViewPager和Fragment共同实现的例子

    在标题和描述中提到的例子中,ViewPager与Fragment结合使用,可以创建一个动态的Tab布局,每个Tab对应一个Fragment。用户可以通过滑动ViewPager在不同的Fragment间切换,每个Fragment展示不同的内容。而ActionBar则...

    Android tab的实现

    综上所述,实现Android的Tab功能涉及多个知识点,包括TabHost、ActionBar、ViewPager以及Activity和Fragment的交互。理解并掌握这些技术,可以让你构建出具有丰富用户体验的多页面Android应用。在实际开发中,应根据...

    ViewPager例子代码

    ViewPager是Android平台中一个强大的视图滑动组件,它允许用户在多个页面间左右滑动,常用于实现类似...通过理解并实践这个“ViewPager例子代码”,你将能够更好地掌握这一组件,为你的应用增添更多的交互性和动态性。

    Android Tab 选项卡 切换

    然而,随着Android设计指南的更新,Google推荐使用`ViewPager`结合`TabLayout`(自Android Design Support Library引入)来创建现代、可定制化的Tab界面。 1. **ViewPager**:`ViewPager`是Android中的一个滑动视图...

    Android ViewPager的使用示例

    本教程将深入探讨如何在Android项目中使用ViewPager,结合Fragment来创建可滑动的页面内容。 首先,我们需要理解ViewPager的基本概念。ViewPager是一个可以水平滑动的容器,它会根据用户滑动的方向加载相邻的页面。...

    android源代码tab+list例子

    在Android开发中,创建一个带有顶部Tab控件和多个自定义List列表的界面是一个常见的需求。这个场景通常出现在需要在同一个界面中展示不同类别数据的应用中。以下是对这个主题的详细解析: 首先,我们需要理解“Tab...

    android实现两层tab嵌套

    3. `TabLayout`配合`PagerAdapter`:`TabLayout`是Android Design Support Library的一部分,用于展示Tab,与`ViewPager`结合可以实现Tab的可视化切换效果。`PagerAdapter`是`ViewPager`的数据适配器,负责为每个Tab...

    8. android Tab 选项卡控件

    Tab选项卡通常与ViewPager结合使用,ViewPager可以滑动浏览多个页面,而TabLayout则提供可视化的选项卡来切换这些页面。在布局文件(如`activity_main.xml`)中,添加`TabLayout`和`ViewPager`: ```xml ...

    android viewpager

    `android viewpager的例子`通常会包括以下步骤: 1. 在布局文件中添加`ViewPager`元素。 ```xml &lt;androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" ...

Global site tag (gtag.js) - Google Analytics