ViewPager,模仿慕课网
源码: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,模仿慕课网的更多相关文章
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...
- 安卓开发_慕课网_ViewPager实现Tab(App主界面)
学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用
来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...
- 使用js脚本批量下载慕课网视频
慕课网(http://www.imooc.com/)上有很多不错的视频,当然我不是来给慕课网打广告的,我本人学习过很多慕课网上的免费的视频. 在线看如果网速慢时,可能会有卡顿,没网时无法观看.所有说下 ...
- 手机端web学习基础--from慕课网
web知识零零散散的知道一些,但总感觉不够系统,遇到问题不知道如何解决,因此特此来系统的学习一下web前端的知识.从慕课网的web基础看起.下面学习http://www.imooc.com/learn ...
- 慕课网-安卓工程师初养成-4-9 Java循环语句之 for
来源:http://www.imooc.com/code/1425 Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换. 语法: 执行过程: ...
- 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while
do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法: 执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...
随机推荐
- struts的由来
当学习或工作时,有些同学会谈到熟悉struts.hibernate.spring等等框架,貌似熟悉这些框架是精通java的表现,但是我们应该首先弄明白为什么要学框架?是为了学习而学习?还是为了工作而学 ...
- 第二天(CSS 选择器)
1.常用的CSS选择器 类型选择器: 例如: p { color : red ; } 后代选择器: 例如: h2 span { font-weight : bold ; ...
- python初探-collections容器数据类型
collections容器数据类型是对基本数据类型的补充,简单介绍下计数器.有序字典.默认字典.可命名元祖.队列. 计数器(Counter) Counter是对字典类型的补充,用于追踪值得出现次数 c ...
- [LeetCode]题解(python):123-Best Time to Buy and Sell Stock III
题目来源: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ 题意分析: 和上题类似,array[i]代表第i天物品 ...
- linux下c/c++方式访问curl的帮助手册
自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记 ...
- C++头文件的包含顺序研究
一.<Google C++ 编程风格指南>里的观点 公司在推行编码规范,领导提议基本上使用<Google C++ 编程风格指南>.其中<Google C++ 编程风格指南 ...
- Node.mysql
mysql为常用数据库,下面简单记录在nodejs中操作mysql数据库的简单实现. 环境: nodejs4.2.2 mysql5.7.12 win7 参考资料: npm mysql 代码 var m ...
- POJ1797 Heavy Transportation 【Dijkstra】
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 21037 Accepted: ...
- Effective C++ 条款39
我从本条款中学到了下面内容: 1.private继承不同于另外两种继承,派生类对象不能隐式转换为基类对象. 例如以下代码: class Bird//鸟 { }; class ostrich:priva ...
- Python lambda和reduce函数
看到一篇博文写lambda和reduce函数.笔者小痒了一下,用Python实现一下: #! /usr/bin/env python # -*-coding:utf-8-*- import time ...