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;
}
}
}
}
- 1
- 2
前往页