package net.oschina.gitapp; import java.util.ArrayList; import java.util.List; import net.oschina.gitapp.common.UIHelper; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.LinearLayout.LayoutParams; /** * 程序欢迎界面 * @author deyi(http://my.oschina.net/LittleDY) * */ public class SplashPage extends Activity implements OnPageChangeListener { private List<ImageView> imageViewList; private TextView tvDescription; private LinearLayout llPoints; private String[] imageDescriptions; private int previousSelectPosition = 0; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setView(); initView(); } public void setView() { setContentView(R.layout.activity_splash_viewpager); /*// 自动切换页面功能 new Thread(new Runnable() { @Override public void run() { while (isLoop) { SystemClock.sleep(2000); handler.sendEmptyMessage(0); } } }).start();*/ } public void initView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); tvDescription = (TextView) findViewById(R.id.tv_image_description); llPoints = (LinearLayout) findViewById(R.id.ll_points); prepareData(); ViewPagerAdapter adapter = new ViewPagerAdapter(); mViewPager.setAdapter(adapter); mViewPager.setOnPageChangeListener(this); mViewPager.getChildAt(mViewPager.getChildCount()-1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); UIHelper.goMainActivity(SplashPage.this); } }); tvDescription.setText(imageDescriptions[previousSelectPosition]); llPoints.getChildAt(previousSelectPosition).setEnabled(true); /** * 2147483647 / 2 = 1073741820 - 1 */ int n = Integer.MAX_VALUE / 2 % imageViewList.size(); int itemPosition = Integer.MAX_VALUE / 2 - n; mViewPager.setCurrentItem(itemPosition); } private void prepareData() { imageViewList = new ArrayList<ImageView>(); int[] imageResIDs = getImageResIDs(); imageDescriptions = getImageDescription(); ImageView iv; View view; for (int i = 0; i < imageResIDs.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageViewList.add(iv); // 添加点view对象 view = new View(this); view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background)); LayoutParams lp = new LayoutParams(5, 5); lp.leftMargin = 10; view.setLayoutParams(lp); view.setEnabled(false); llPoints.addView(view); } } private int[] getImageResIDs() { return new int[]{ R.drawable.git_star, R.drawable.git_star, R.drawable.git_star, R.drawable.git_star, R.drawable.git_star }; } private String[] getImageDescription() { return new String[]{ "第一个引导页面", "第二个引导页面", "第三个引导页面", "第四个引导页面", "第五个引导页面" }; } class ViewPagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } /** * 判断出去的view是否等于进来的view 如果为true直接复用 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } /** * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imageViewList.get(position % imageViewList.size())); } /** * 创建一个view */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageViewList.get(position % imageViewList.size())); return imageViewList.get(position % imageViewList.size()); } } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int position) { // 改变图片的描述信息 tvDescription.setText(imageDescriptions[position % imageViewList.size()]); // 切换选中的点 llPoints.getChildAt(previousSelectPosition).setEnabled(false); // 把前一个点置为normal状态 llPoints.getChildAt(position % imageViewList.size()).setEnabled(true); // 把当前选中的position对应的点置为enabled状态 previousSelectPosition = position % imageViewList.size(); } @Override protected void onDestroy() { super.onDestroy(); } }