package com.stevenhu.vpt;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements OnClickListener
{
private final static String TAG = "MainActivity";
private ViewPager mViewPager;
private ViewPagerAdapter mViewPagerAdapter;
private LinearLayout mIndicatorGroup;
//定义指示翻页图标数组
private ImageView[] mIndicatorImage;
private Button mBackButton, mNextButton;
//定义当前在第几页
private int mCurrentPage = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mViewPager = (ViewPager)findViewById(R.id.viewpager);
//创建自定义的ViewPagerAdapter对象
mViewPagerAdapter = new ViewPagerAdapter(this, mViewPager);
//添加Fragment
mViewPagerAdapter.addFragment(FirstFragmentPage.class, null);
mViewPagerAdapter.addFragment(SecondFragmentPage.class, null);
mViewPagerAdapter.addFragment(ThirdFragmentPage.class, null);
mViewPagerAdapter.addFragment(ForthFragmentPage.class, null);
//获取指示器图标所在界面布局对象
mIndicatorGroup = (LinearLayout)findViewById(R.id.indicator_group);
mIndicatorImage = new ImageView[mViewPagerAdapter.getCount()];
mBackButton = (Button)findViewById(R.id.back_button);
mNextButton = (Button)findViewById(R.id.next_button);
mBackButton.setOnClickListener(this);
mNextButton.setOnClickListener(this);
initIndicator();
}
//初始化指示器,实现随着创建页数的增加从而添加相应个数的指示图标。
private void initIndicator()
{
for (int i = 0; i < mViewPagerAdapter.getCount(); i ++)
{
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(20,20));
imageView.setPadding(20, 0, 20, 0);
if (i == 0)
{
imageView.setBackgroundResource(R.drawable.page_indicator_focused);
}
else
{
imageView.setBackgroundResource(R.drawable.page_indicator);
}
mIndicatorImage[i] = imageView;
mIndicatorGroup.addView(mIndicatorImage[i]);
}
}
/*通过监听按钮实现向上或向下翻页。
* 当然,由于是使用ViewPager,所以用户也可以通过滑动屏幕来实现翻页
*/
@Override
public void onClick(View v)
{
if(v.getId() == R.id.back_button){
//当前为第一页则直接返回不做处理
if(mCurrentPage <= 0)
{
return;
}
//返回上一页
mViewPager.setCurrentItem(mCurrentPage - 1, true);
}
else
{
//当前页为最后一页
if(mCurrentPage >= mViewPagerAdapter.getCount() - 1)
{
this.finish();
}
//返回下一页
mViewPager.setCurrentItem(mCurrentPage + 1, true);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
{
return true;
}
return super.onKeyDown(keyCode, event);
}
/*通过调用FragmentPagerAdapter的addFragment方法实现添加Fragment类型的class对象
* 通过调用FragmentPagerAdapter的getItem方法实现取出Fragment类型对象
*/
private class ViewPagerAdapter extends FragmentPagerAdapter implements OnPageChangeListener
{
private Context mContext;
private ViewPager mAdpterViewPager = null;
private ArrayList<TabInfo> mTabList = new ArrayList<TabInfo>();
public ViewPagerAdapter(Activity activity, ViewPager viewPager) {
super(activity.getFragmentManager());
mContext = activity;
mAdpterViewPager = viewPager;
//为ViewPager添加适配器,适配器为当前的ViewPagerAdapter
mAdpterViewPager.setAdapter(this);
//为ViewPager设置翻页改变监听器
mAdpterViewPager.setOnPageChangeListener(this);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
Log.d(TAG, "onPageScrollStateChanged-->arg0-->" + arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
Log.d(TAG, "onPageScrolled-->arg0-->" + arg0 +
"-->arg1-->" + arg1 +
"-->arg2-->" + arg2);
}
//当前选中的页面,position表示在第几页,0为第一页
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
Log.d(TAG, "onPageSelected-->position-->" + position);
mCurrentPage = position;
for (int i = 0; i < mIndicatorImage.length; i ++)
{
if (i == position)
{
//若为当前页面,指示器显示为聚焦图片
mIndicatorImage[i].setBackgroundResource(R.drawable.page_indicator_focused);
}
else
{
mIndicatorImage[i].setBackgroundResource(R.drawable.page_indicator);
}
}
//若当前页面为最后一页,则下一页按钮显示为完成按钮
if(position == getCount() - 1){
mNextButton.setText(R.string.finish);
}else{
mNextButton.setText(R.string.next);
}
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
TabInfo tab = mTabList.get(position);
if (tab.fragment == null) {
//创建Fragment对象
tab.fragment = Fragment.instantiate(mContext,
tab.clazz.getName(), tab.bundle);
}
return tab.fragment;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mTabList.size();
}
public void addFragment(Class<?> clazz, Bundle bundle) {
TabInfo tabInfo = new TabInfo(clazz, bundle);
mTabList.add(tabInfo);
//通知数据改变
notifyDataSetChanged();
}
private final class TabInfo {
private final Class<?> clazz;
private final Bundle bundle;
Fragment fragment;
TabInfo(Class<?> clazz, Bundle bundle) {
this.clazz = clazz;
this.bundle = bundle;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android之ViewPager的使用
共43个文件
class:13个
png:10个
xml:7个
5星 · 超过95%的资源 需积分: 10 157 下载量 175 浏览量
2014-03-12
00:37:09
上传
评论 1
收藏 282KB ZIP 举报
温馨提示
ViewPager,FragmentPagerAdapter,Fragment
资源推荐
资源详情
资源评论
收起资源包目录
ViewPagerTest.zip (43个子文件)
ViewPagerTest
.project 849B
project.properties 361B
proguard.cfg 1KB
src
com
stevenhu
vpt
MainActivity.java 6KB
SecondFragmentPage.java 1KB
ForthFragmentPage.java 1KB
FirstFragmentPage.java 1KB
ThirdFragmentPage.java 1KB
AndroidManifest.xml 733B
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
page_indicator_focused.png 380B
page_indicator.png 181B
drawable-mdpi
ic_launcher.png 3KB
layout
third_fragment_page.xml 410B
second_fragment_page.xml 410B
first_fragment_page.xml 410B
forth_fragment_page.xml 410B
main.xml 2KB
values
strings.xml 260B
assets
gen
com
stevenhu
vpt
R.java 1KB
.classpath 453B
bin
resources.ap_ 14KB
classes
com
stevenhu
vpt
R$layout.class 561B
R$drawable.class 485B
R$attr.class 334B
ThirdFragmentPage.class 2KB
MainActivity$ViewPagerAdapter$TabInfo.class 1KB
R$id.class 518B
MainActivity$ViewPagerAdapter.class 4KB
R.class 517B
R$string.class 478B
SecondFragmentPage.class 2KB
MainActivity.class 3KB
FirstFragmentPage.class 2KB
ForthFragmentPage.class 2KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
page_indicator_focused.png 380B
page_indicator.png 181B
drawable-mdpi
ic_launcher.png 2KB
classes.dex 251KB
ViewPagerTest.apk 122KB
共 43 条
- 1
stevenhu_223
- 粉丝: 573
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页