当前位置: 代码迷 >> Android >> 小弟我的Android案例—启动页
  详细解决方案

小弟我的Android案例—启动页

热度:82   发布时间:2016-04-28 01:47:52.0
我的Android案例—启动页

2015年的Android案例之旅

案例十:启动页

作用:
1. 打广告,放几张有点创意或者好看的图片吸引眼球
2. 数据准备,预加载一些数据,创建表什么的

知识点:

  1. ViewPager控件的的使用。
  2. 相应监听事件的调用
  3. 通过SharedPreferences来存储标识

涉及文件:

  1. res->layout->activity_main.xml 主界面布局文件
  2. res->layout->splash.xml 欢迎界面布局文件
  3. res->layout->guide 引导界面布局文件
  4. res->layout->one(two..) 引导界面布局文件
  5. res->src->package->MainActivity.java 主界面
  6. res->src->package->SplashActivity.java 欢迎界面
  7. res->src->package->guideActivity.java 引导界面
  8. res->src->package->ViewPagerAdapter.java 适配器

关于布局文件,这次主要引用的还是ImageView控件,用来展示效果,在此就不多做解释。
主要来看下ViewPager以及ViewPagerAdapter的使用
guideActivity.java

public class GuideActivity extends ActionBarActivity implements ViewPager.OnPageChangeListener {    private ViewPager vp;    private ViewPagerAdapter vpAdapter;    private List<View> views;    // 底部小点图片    private ImageView[] dots;    // 记录当前选中位置    private int currentIndex;    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(R.layout.guide);        initView();        initDots();    }    private void initView(){        LayoutInflater inflater = LayoutInflater.from(this);        views = new ArrayList<View>();        views.add(inflater.inflate(R.layout.what_new_one,null));        views.add(inflater.inflate(R.layout.what_new_tow,null));        views.add(inflater.inflate(R.layout.what_new_three,null));        views.add(inflater.inflate(R.layout.what_new_four,null));        //初始化Adapter        vpAdapter = new ViewPagerAdapter(views,this);        vp = (ViewPager)findViewById(R.id.guidePages);        vp.setAdapter(vpAdapter);        vp.setOnPageChangeListener(this);    }    private void initDots(){        LinearLayout ll = (LinearLayout) findViewById(R.id.ll);        dots = new ImageView[views.size()];        // 循环取得小点图片        for (int i = 0; i < views.size(); i++) {            dots[i] = (ImageView) ll.getChildAt(i);            dots[i].setEnabled(true);// 都设为灰色        }        currentIndex = 0;        dots[currentIndex].setEnabled(false);// 设置为白色,即选中状态    }    private void setCurrentDot(int position) {        if (position < 0 || position > views.size() - 1                || currentIndex == position) {            return;        }        dots[position].setEnabled(false);        dots[currentIndex].setEnabled(true);        currentIndex = position;    }    // 当滑动状态改变时调用    @Override    public void onPageScrollStateChanged(int arg0) {    }    // 当当前页面被滑动时调用    @Override    public void onPageScrolled(int arg0, float arg1, int arg2) {    }    // 当新的页面被选中时调用    @Override    public void onPageSelected(int arg0) {        // 设置底部小点选中状态        setCurrentDot(arg0);    }

ViewPagerAdapter.java

public class ViewPagerAdapter extends PagerAdapter {    //存储数据的文件名    private static final String SHAREDPREFERENCES_NAME = "first_pref";    //界面列表    private List<View> views;    private Activity activity;    public ViewPagerAdapter(List<View> views,Activity activity){        this.views = views;        this.activity = activity;    }    // 销毁arg1位置的界面    @Override    public void destroyItem(View arg0, int arg1, Object arg2) {        ((ViewPager) arg0).removeView(views.get(arg1));    }    // 判断是否由对象生成界面    @Override    public boolean isViewFromObject(View view, Object parent) {        return (view == parent);    }    // 获得当前界面数    @Override    public int getCount() {        if (views != null) {            return views.size();        }        return 0;    }    @Override    public Object instantiateItem(View view,int postion){        ((ViewPager)view).addView(views.get(postion),0);        if(postion == views.size()-1){            ImageView mStartImageButton = (ImageView)view.findViewById(R.id.iv_start);            mStartImageButton.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    setGuide();                    goHome();                }            });        }        return views.get(postion);    }   private void goHome(){       Intent intent = new Intent(activity, MainActivity.class);       activity.startActivity(intent);       activity.finish();   }   private void setGuide(){       SharedPreferences preferences = activity.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);       SharedPreferences.Editor editor = preferences.edit();       editor.putBoolean("isFirstIn",false);       editor.commit();   }}

当然还要考虑到全屏,AndroidManifest.xml文件中Activity的申明,不然最后的效果还是不怎么好看的。
其他几种实现的方式,大家可以了解了解
第一种: ViewFlipper + GestureDetector

第二种: ActivityGroup + GestureDetector

第三种: ViewFlow (开源项目)

  相关解决方案