Android:ViewPager实现屏幕轮转和使用PagerTabStrip
① ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
② ViewPager类需要一个PagerAdapter适配器类给它提供数据。
③ ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v4.view.PagerTabStrip
android:id="@+id/viewpager_tab"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="#ffe66f"
>
</android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager>
</RelativeLayout>
MainActivity.java
里面有很详细的注释,我就不在这赘述了.
package com.example.administrator.viewpagerdemo; import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup; import java.util.ArrayList;
import java.util.List; public class MainActivity extends Activity { private ViewPager viewPager = null;
private PagerTabStrip pagerTabStrip = null; //导航条 private List<View> viewContainter = new ArrayList<View>(); //存放容器
private List<String> tabContainter = new ArrayList<String>(); //存放 tab导航 private ViewPagerAdapter viewPagerAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 绑定组件
viewPager = (ViewPager) findViewById(R.id.viewpager);
pagerTabStrip = (PagerTabStrip) findViewById(R.id.viewpager_tab);
pagerTabStrip.setTextColor(getResources().getColor(R.color.black)); //设置 字体颜色
//取消Tab 下面的长横线
pagerTabStrip.setDrawFullUnderline(false);
//设置每个Tab的下划线颜色
pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.red));
pagerTabStrip.setTextSize(0,40);
pagerTabStrip.setTextSpacing(10); //建立四个view的样式,并找到他们
View view_1 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_1,null);
View view_2 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_2,null);
View view_3 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_3,null);
View view_4 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_4,null);
//加入ViewPage的容器
viewContainter.add(view_1);
viewContainter.add(view_2);
viewContainter.add(view_3);
viewContainter.add(view_4);
//想Tab容器中加入标签
tabContainter.add("最近");
tabContainter.add("今天");
tabContainter.add("明天");
tabContainter.add("后天"); //初始化viewPagerAdapter
viewPagerAdapter = new ViewPagerAdapter();
//设置adapter
viewPager.setAdapter(viewPagerAdapter); }
//viewpager的适配器
private class ViewPagerAdapter extends PagerAdapter{ //该方法 决定 并 返回 viewpager中组件的数量
@Override
public int getCount() {
return viewContainter.size();
} @Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
//滑动切换的时候,消除当前组件
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewContainter.get(position));
}
//每次滑动的时候生成的组件
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewContainter.get(position));
return viewContainter.get(position);
}
//设置Tab
@Override
public CharSequence getPageTitle(int position) {
return tabContainter.get(position);
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId(); //noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
} return super.onOptionsItemSelected(item);
}
}
我们还需要建立四个View的布局文件,里面就放了一个ImageView,并且指定了背景,在这里我就贴出来一个布局文件的代码(其他的都一样)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:id="@+id/viewpager_view_image_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/image1"/>
</LinearLayout>
效果图:

对于PagerAdapter类,android的文档已经说的很清楚了,必须至少实现如下的4个方法,如果需要更好的扩展也可以实现更多的方法。
public Object instantiateItem(ViewGroup container, int position)
public void destroyItem(ViewGroup container, int position,Object object)
public int getCount()
public boolean isViewFromObject(View arg0, Object arg1)
Android:ViewPager实现屏幕轮转和使用PagerTabStrip的更多相关文章
- Android 开源组件 ----- Android LoopView无限自动轮转控件
Android 开源组件 ----- Android LoopView无限自动轮转控件 2015-12-28 15:26 by 杰瑞教育, 32 阅读, 0 评论, 收藏, 编辑 一.组件介绍 App ...
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
前言:在前两篇文章中,我们讲解了滑动页面的的实现方法与四大函数的意义,但有时,仅仅实现页面滑动是不够的,还要有标题栏才会显得更友好.所以在这篇文章中,我将会向大家展示在Android.support. ...
- Android -- ViewPager切换动画,PageTransformer
transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时 ...
- [转]ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
目录(?)[-] 一PagerTitleStrip Class Overview XML布局文件 重写适配器的getPageTitle函数 变量 初始化 重写CharSequence getPag ...
- Android 实现两屏幕互相滑动
Android 实现两屏幕互相滑动 下文来自: http://blog.csdn.net/song_shi_chao/article/details/7081664 ----------------- ...
- Android ViewPager 用法
Android ViewPager 用法 场景:一般第一次打开应用程序时,程序会有一个提示页来给展现应用程序都有哪些功能:或者程序更新时,又更新哪些新特性,都可以使用ViewPager Demo 描述 ...
- Android ViewPager再探:增加滑动指示条
上一篇:<Android ViewPager初探:让页面滑动起来> ViewPager只是左右滑动有些丑,也不知道当前位于第几页面. 可以在上方加入滑动指示条,来确定当前位置. 只需要修改 ...
- Android ViewPager初探:让页面滑动起来
下一篇:<Android ViewPager再探:增加滑动指示条> ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写: instantiateItem(Vi ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
随机推荐
- 利用DataTable快速批量导数据
DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(@"data sou ...
- Android开发中常用到方法总结
1.判断服务是否在运行中 public static boolean isServiceRunning(Context context, String serviceName) { boolean ...
- jquery ajax 保存讲解
jquery ajax 参数传递与数据保存实例是一款适合于初学者用的,首先我们是讲一下关于如何利用ajax +php进行数据操作,然后再详细的介绍关于jquery ajax的帮助说明. jquery ...
- Save a bricked Samsung Note 3 and do extraction
The case scenario was about bank robery and the suspect threw his Samsung Note 3 into the river. For ...
- leetcode 58
58. Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space char ...
- mac 显示隐藏文件夹
在终端输入 defaults write com.apple.finder AppleShowAllFiles -boolean true;killall Finder即可
- [原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)
本文出自:http://blog.csdn.net/svitter 题意: f(x) = K, x = 1 f(x) = (a*f(x-1) + b)%m , x > 1 求出( A^(f(1) ...
- 通过jquery 获取文本框的聚焦和失焦方法
我还是喜欢用jquery来实现,不管页面中多少个输入框需要实现聚焦,失焦,都公有,我常用的方法是: 遍历该页面中的input框,获取输入框中的val值,当该输入框聚焦的时候跟存放的oldValue值进 ...
- winfrom 导入Excel表到access数据库(来自小抽奖系统)
网上有很多这种方法,本人只是针对自己的系统来实现的 //导入excel表 private void ImportTSMenu_Click(object sender, EventArgs e) { O ...
- sqoop导出工具
sqoop的导出工具是把HDFS上文件中的数据导出到mysql中 mysql中的表 现在在linux上创建一个文件,并把这个文件上传到hdfs上 cat person.txt ,no7, ,no8, ...