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>. 如果 ...
随机推荐
- cocos2dx中Action汇总
本文由qinning199原创, 转载请注明:http://www.cocos2dx.net/?p=119 今天总结一下cocos2dx中的一些Action动作,其中To表示到达某个点,而By表示偏移 ...
- Volley 设置 RetryPolicy 不起作用, 重复提交
RT, Google后有的说是 将超时时间设置为0, 但是还是会重试提交, 解决方案如下: static HurlStack stack = new HurlStack(){ @Override pr ...
- Android 开发笔记“Application 理解”
Android 中Application类用法 1. Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时 ...
- hdu 3333 Turing Tree
题目链接 给n个数, m个询问, 每次询问输出区间内的数的和, 相同的数只计算一次. 数组里的数是>-1e9 <1e9, 可以把它离散以后用莫队搞... #include <iost ...
- MacOS下使用VMware5 破解 安装win7 ISO 激活
VMware5 下载 破解 以及win7 ISO版本的安装 激活VMware5 下载与破解参考方法http://www.macx.cn/thread-2060440-1-1.htmlVMware5 是 ...
- Bootstrap 响应式瀑布流 (使用wookmark)
使用瀑布布局 官方 http://www.wookmark.com/jquery-plugin GitHub https://github.com/GBKS/Wookmark-jQuery (下载后 ...
- 百度2017笔试题:寻找n个员工中未打卡的那一个
声明:图片来自网络,笔者只是试着做了一下,然后做个记录. 拿到这个题目的时候,笔者首先想到的是二分.两个数组,一个是全体员工的集合A:一个是缺少一人的集合B.对A,B排序,再对B进行二分,得到B的中间 ...
- QT不让windows休眠的方法
对于一些Windows应用程序,必须要保证os不能休眠才能有效工作,如迅雷下载软件,如果os进入休眠,则会导致网络不正常,从而导致不能下载东西.那木有没有1种机制,当打开软件的时候,就自动将os设为不 ...
- 【Leetcode】Triangle
给定一个由数字组成的三角形,从顶至底找出路径最小和. Given a triangle, find the minimum path sum from top to bottom. Each step ...
- HDU2795 billboard【转化为线段树。】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放 ...