您的位置:首页 > 移动开发 > Android开发

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

2014-01-22 15:19 597 查看
最近在用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息