源码:http://pan.baidu.com/s/1DhM14

使用fragment实现的:http://pan.baidu.com/s/1mgzWlM4

SecondActivity.java

 package com.imooc.tab01;

 import java.util.ArrayList;
import java.util.List; import android.app.Activity;
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.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast; public class SecondActivity extends Activity implements OnClickListener{
List<View> mViews = new ArrayList<View>();
PagerAdapter adapter;
ViewPager vp; private ImageButton mWeixinImg;
private ImageButton mFrdImg;
private ImageButton mAddressImg;
private ImageButton mSettingImg; //tabs
private LinearLayout mTabWeixin;
private LinearLayout mTabFrd;
private LinearLayout mTabAddress;
private LinearLayout mTabSetting; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
//LinearLayout,并且设置onClick()监听
mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin2);
mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd2);
mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address2);
mTabSetting = (LinearLayout) findViewById(R.id.id_tab_settings2);
mTabWeixin.setOnClickListener(this);
mTabFrd.setOnClickListener(this);
mTabAddress.setOnClickListener(this);
mTabSetting.setOnClickListener(this); //ImageButton
mWeixinImg = (ImageButton) findViewById(R.id.id_imgbtn_wx);
mFrdImg = (ImageButton) findViewById(R.id.id_imgbtn_py);
mAddressImg = (ImageButton) findViewById(R.id.id_imgbtn_txl);
mSettingImg = (ImageButton) findViewById(R.id.id_imgbtn_sz);
/*
* 用来把layout布局转换为view对象,并且把view放到List里,这个泛型为View的List在new PagerAdapter的时候,
* 其内部的instantiateItem()方法要用到
*/
LayoutInflater inflater = LayoutInflater.from(this);
View v1 = inflater.inflate(R.layout.tab1, null);
View v2 = inflater.inflate(R.layout.tab2, null);
View v3 = inflater.inflate(R.layout.tab3, null);
View v4 = inflater.inflate(R.layout.tab4, null);
//步骤1
mViews.add(v1);
mViews.add(v2);
mViews.add(v3);
mViews.add(v4);
vp = (ViewPager) findViewById(R.id.id_viewpager2);
//步骤2
adapter = new PagerAdapter() { @Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View v = mViews.get(position);
container.addView(v);// 一定要把view添加到container中,否则tab中无法显示view
return v;
} @Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(mViews.get(position));//从container中移除view
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;//固定写法
} @Override
public int getCount() {
// TODO Auto-generated method stub
return mViews.size();//固定写法
}
};
//步骤3
vp.setAdapter(adapter);
System.out.println("SecondActivity,has already setAdapter..."); //设置Tab滑动的时候的逻辑代码
vp.setOnPageChangeListener(new OnPageChangeListener() {
int current;
@Override
public void onPageSelected(int arg0) {
current = vp.getCurrentItem();//重要的方法,获取当前是哪个tab,
switch (current) {
case 0:
//滑动到第一个tab
resetImg();
//设置微信ImageButton为按下去的效果
mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
resetImg();
//同上
mFrdImg.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
resetImg();
//同上
mAddressImg.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
resetImg();
//同上
mSettingImg.setImageResource(R.drawable.tab_settings_pressed);
break;
default:
break;
}
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
Toast.makeText(SecondActivity.this, "onPageScrolled.......", 0)
.show();
} @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
});
}
//重置所有的ImageButton为灰色
private void resetImg() {
mWeixinImg.setImageResource(R.drawable.tab_weixin_normal);
mFrdImg.setImageResource(R.drawable.tab_find_frd_normal);
mAddressImg.setImageResource(R.drawable.tab_address_normal);
mSettingImg.setImageResource(R.drawable.tab_settings_normal);
}
/**
* 用来设置ImageButton点击的时候切换到对应的Tab中,
*
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//1 先重置所有ImageButton的背景为灰色
resetImg();
//2
switch (v.getId()) {
//注意,case R.id.id_tab_weixin,这个id不是imageButton的id,而是imageButton的父控件LinearLayout的id
case R.id.id_tab_weixin2:
Toast.makeText(this, "weixin", 0).show();
//设置电机的ImageButton为亮色
mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);
//设置当前所在的tab
vp.setCurrentItem(0);
break;
case R.id.id_tab_frd2:
mWeixinImg.setImageResource(R.drawable.tab_find_frd_pressed);
vp.setCurrentItem(1);
break;
case R.id.id_tab_address2:
mWeixinImg.setImageResource(R.drawable.tab_address_pressed);
vp.setCurrentItem(2);
break;
case R.id.id_tab_settings2:
mWeixinImg.setImageResource(R.drawable.tab_settings_pressed);
vp.setCurrentItem(3);
break;
default:
break;
}
}
}

ViewPager对应的xml,main2.xml:

 <LinearLayout 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"
android:orientation="vertical" > <include layout="@layout/top2" /> <android.support.v4.view.ViewPager
android:id="@+id/id_viewpager2"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</android.support.v4.view.ViewPager> <include layout="@layout/bottom2" /> </LinearLayout>

效果图如:

ViewPager,模仿慕课网的更多相关文章

  1. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  2. 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  3. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  4. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  5. 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用

    来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...

  6. 使用js脚本批量下载慕课网视频

    慕课网(http://www.imooc.com/)上有很多不错的视频,当然我不是来给慕课网打广告的,我本人学习过很多慕课网上的免费的视频. 在线看如果网速慢时,可能会有卡顿,没网时无法观看.所有说下 ...

  7. 手机端web学习基础--from慕课网

    web知识零零散散的知道一些,但总感觉不够系统,遇到问题不知道如何解决,因此特此来系统的学习一下web前端的知识.从慕课网的web基础看起.下面学习http://www.imooc.com/learn ...

  8. 慕课网-安卓工程师初养成-4-9 Java循环语句之 for

    来源:http://www.imooc.com/code/1425 Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换. 语法: 执行过程: ...

  9. 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while

    do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法:  执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...

随机推荐

  1. Java 比较两日期相差天数

    (版本1) publicstaticint getIntervalDays(Date fDate, Date oDate) { if (null == fDate || null == oDate) ...

  2. 简明的例子讲解position:relative、float、overflow:hidden和inline-block

    标签(空格分隔): css relative float 我们通过一个简单的实验来了解position:relative float overflow:hidden 和 inline-block. 下 ...

  3. (iOS)推送常见问题

    1.为什么启动的时候出现 Did Fail To Register For Remote Notifications With Error的错误程序运行的时候出现下面的错误信息: did Fail T ...

  4. VC中判断指定窗口是否被其他窗口遮挡

    本来是想判断当前窗口是否在最前面,无奈办法用尽就是不行,于是想换个思路:判断指定窗口是否被其他窗口遮挡.然后掘网三尺,找到了这个: bool CTestTray2Dlg::IsCoveredByOth ...

  5. HDU 1276 士兵队列训练问题

    模拟题,学了一下list it=li.erase(it):指向删除后的第一个元素 #include <cstdio> #include <list> using namespa ...

  6. HDOJ 1429 胜利大逃亡(续) (bfs+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件: 考虑 ...

  7. pyrailgun 0.24 : Python Package Index

    pyrailgun 0.24 : Python Package Index pyrailgun 0.24 Download pyrailgun-0.24.zip Fast Crawler For Py ...

  8. 【源码】实现Android闹钟功能使用HTML+JS,并附带Alarm代码分享

    先是开发手册中最终功能的实现函数,再是Alarm接口的源码. 参数: argu:型如“key1=value1;key2=value2;......”的参数表.首先,该参数表支持 rexseeNotif ...

  9. 一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)

    小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3 ...

  10. COM编程-注册DLL形式的COM服务器

    这篇文章不涉及任何的有关COM的技术的讲解,仅仅的说一下写好的DLL形式的COM怎么使用.如下图所示,我已经有了一个DLL形式的COM服务器和一个使用COM服务器的COM客户端: 现在这个DLL的CO ...