Android ViewPager做引导页不定页数 代码实例

最近在用ViewPager做引导界面,并解决了ViewPager向右滑动到最后,再向右滑动无法实现界面跳转的问题。而且要求引导页面是从服务器获取。

所以页面的个数是不定的。效果图:



关键代码:

package com.example.pagerdemo;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class SplashAdActivity extends Activity implements OnTouchListener{

	private ViewPager pager_splash_ad;
	private ADPagerAdapter adapter;
	private int flaggingWidth;
	private int size = 0;
	private int lastX = 0;
	private int currentIndex = 0;
	private CirclePageIndicator indicator;
	private boolean locker = true;

	@SuppressWarnings("unchecked")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash_ad);
		
		//计算屏幕密度,滑动大于屏幕一半时才跳转界面
        DisplayMetrics dm = new DisplayMetrics();  
        getWindowManager().getDefaultDisplay().getMetrics(dm);  
        flaggingWidth = dm.widthPixels / 2;

        List<String> splash_ad = (List<String>) getIntent()
				.getSerializableExtra("splash_ad");
		pager_splash_ad = (ViewPager) findViewById(R.id.pager_splash_ad);
		//模拟的3个,如果从服务器获取就直接赋值就行
		List<View> views = new ArrayList<View>();
		for (String str : splash_ad) {
			View view = LayoutInflater.from(this).inflate(
					R.layout.view_splash_ad, null);
			ImageView iv_ad = (ImageView) view.findViewById(R.id.iv_ad);
			iv_ad.setImageResource(R.drawable.tt);
			views.add(view);
			View view1 = LayoutInflater.from(this).inflate(
					R.layout.view_splash_ad, null);
			ImageView iv_ad1 = (ImageView) view1.findViewById(R.id.iv_ad);
			iv_ad1.setImageResource(R.drawable.ww);
			views.add(view1);
			View view2 = LayoutInflater.from(this).inflate(
					R.layout.view_splash_ad, null);
			ImageView iv_ad2 = (ImageView) view2.findViewById(R.id.iv_ad);
			iv_ad2.setImageResource(R.drawable.jj);
			views.add(view2);
		}
		size = views.size();

		adapter = new ADPagerAdapter(this, views);
		pager_splash_ad.setAdapter(adapter);
		indicator = (CirclePageIndicator) findViewById(R.id.viewflowindic);
		indicator.setmListener(new MypageChangeListener());
		indicator.setViewPager(pager_splash_ad);
		if (views.size() == 1) {
			Handler handler = new Handler();
			handler.postDelayed(new Runnable() {

				@Override
				public void run() {
					gotoMain();
				}
			}, 1000);
		} else {
//			pager_splash_ad.setOnPageChangeListener(new MypageChangeListener());
			pager_splash_ad.setOnTouchListener(this);
		}
	}

	
	private class MypageChangeListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int position) {
//			System.err.println("------position---"+position);
//			currentItem = position;
			
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onPageSelected(int arg0) {
			currentIndex = arg0;
		}

	}
	
	private void gotoMain(){
		Intent intent = new Intent(SplashAdActivity.this,
				SecoundActivity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.alpha_in_anim,
				R.anim.alpha_out_anim);
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			lastX = (int)event.getX();
			break;
		case MotionEvent.ACTION_MOVE:
			if((lastX - event.getX()) > flaggingWidth && (currentIndex == size -1) && locker){
				locker = false;
				System.err.println("-------1111-------");
				gotoMain();
			}
			break;
		default:
			break;
		}
		return false;
	}
	

}

Demo下载地址: http://download.csdn.net/detail/taotao19880301/6874129





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值