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>. 如果 ...
随机推荐
- C# 中带@字符串中的转义符号
C#转义字符 c#里 @ 表示的是:1.在C#中,"c:\\temp"表示路径是c:\temp; 而@"c:\temp"就表示c:\temp; 所以,@的作用就 ...
- js运算符(运算符的结合性)
1.javascript具有下列种类的运算符:算术运算符;逻辑运算符;比较运算符; 2.目的分类:字符串运算符;逻辑运算符;逐位运算符;赋值运算符; 3.特殊运算符:条件运算符;typeof运算符;创 ...
- 我的第一个REST客户端程序!
Delphi:XE8 看了好几天的资料了,也没有弄出来一个REST程序,尝试了XE8中带的例子,也都没有搞懂.我在网上不断搜索,看是否能够找到适合自己的文章,希望能够做出来一个REST的小例子,万幸, ...
- HDU 2227 Find the nondecreasing subsequences
题目大意:给定一个序列,求出其所有的上升子序列. 题解:一开始我以为是动态规划,后来发现离散后树状数组很好做,首先,c保存的是第i位上升子系列有几个,那么树状数组的sum就直接是现在的答案了,不过更新 ...
- http://qt-project.org/wiki/Category:Developing_with_Qt::QtWebKit#ff7c0fcd6a31e735a61c001f75426961
404: Not Found | Qt Project QtWebKit documentation http://dwz.cn/hr2013
- SharePoint 2010 用Event Receiver将文件夹自动变成approved状态 (1)
当开发一个sharepoint门户网站,或者是一个内容管理的网站的时候,站点的模板通常会选用publish portal,或者是开启了publishing feature来对内容进行版本控制和流程控制 ...
- Runtime.exec使用错误导致延迟.md
这篇文章是纪录了一个bug解决的过程,可是我还是没有可以真正地找出bug的缘由.希望大牛可以详解. 问题的发现 当接触的系统越来越大的时候,对于系统的性能越来越高的时候,找到表面问题的真正原因就慢慢地 ...
- 如何让HTML的编写更具结构性
首先声明,我不是搞技术的,很多词汇写的不够专业,但作为一枚菜鸟,我站在菜鸟的角度,来讲述我在学习技术的过程中所遇到的问题,和解决的方案. 入门HTML还算简单,无非是先写好固定的三对开闭标签结构:ht ...
- linux命令:rsync, 同步文件和文件夹的命令
Usage: rsync [OPTION]... SRC [SRC]... DEST or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST or ...
- git从github下载代码
Github作为远程仓库的使用详解 http://blog.csdn.net/djl4104804/article/details/50778717 centos local: 通过g ...