我的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 (开源项目)

时间: 2024-07-31 13:31:14

我的Android案例—启动页的相关文章

Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象,微信每次启动的时候,是直接进入这个启动页面. 我的意思是,很多应用,往往会先白屏停顿一下后再进入启动页面(Splash).为了印证这一点,我把手机上所有的App都点了一遍.选几个例子 如下图: 微信:  斗鱼:  斗鱼和微信是直接进入了,他们的Splash页面. 知乎:  B站:  知乎和B站要先

Android中启动页ViewPager和ViewFlipper带指示器

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 首先我们来分析一下,想要实现启动页的功能,大家第一个想到的就是使用ViewPager,使用ViewPager确实是一种比较好的方式,而且思路也是比较清晰的.今天我们就一起来学习一下,使用ViewPager和ViewFlipper实现启动页带小点功能. 先展示一下图片,看看是不是你想要的效果.  1.ViewPager和ViewFlipper的区别 ViewFlipper继承ViewAnimator,切换view的时候是有动画

android开发 解决启动页空白或黑屏问题

遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜色,因此我们只要在启动页设置windows背景颜色就好了,那么在哪里设置呢?  就是theme里面. 解决办法:参考:[Android Drawable 那些不为人知的高效用法] [Android 启动APP时黑屏白屏的三个解决方案] 首先看之前的布局文件xml写法 <?xml version=&quo

Android启动页黑屏的解决方案

一般APP启动都会显示一个白屏或者黑屏的页面,再跳到欢迎页,这样子的体验效果不好.这到底是怎么回事呢?要如何解决它呢?今天我们来分析下它产生的原因,以及解决方案. 1.产生原因 当系统启动一个APP时,zygote进程首先会创建一个进程去执行这个APP,但是创建进程是需要时间的,用户点击后以为没响应会再次点击,这样的体验效果不佳.为了解决这种迷之尴尬,Android系统会根据你的manifest中设置的主体颜色来显示一个白屏或者黑屏,它的正式称呼是Preview window,即预览窗口. 2.

Android用gif做启动页

公司的一个app的启动页想改为gif图,之前没有在android中加入过gif,所以赶紧饿补! 前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果.当然,经过略加改造,我们是可以让gif在ImageView上完美加载的. 正文 Android给我们提供了一个Movie类,可以让我们实现加载gif格式资源的目标.我们需要导入android.graphics.M

Cocos2dx Android 启动页的设置

cocos2dx android上的启动页的设置实际都差不多,在网上看了一些资料,很多人都是重新弄了一个Activity作为启动页,这样子是没问题,但是在cocos2dx android上中间会有一个很长得黑屏时间,这主要是在加载一些资源:启动页的还有一种做法是直接在主页面上写,实现请参考 Android应用启动界面的实现方法 这篇博客个人感觉还是写的不错的,好了现在实现cocos2dx android上的启动页方法实现如下: 我采用的cocos2dx 3.2的版本. 在AppActivity里

【Android】Mac下Android Studio设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg. 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: public class BZLaunchActivity extends AppCompatActivity { private final int SPLASH_DISPLAY_LENGHT = 2000;//两秒后进入系统,时间可自行调整 @Override protected void onCreate(Bundle sav

Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏

原文:Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏 大家会发现一个空项目,从手机桌面打开app是秒启动.但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面. 个人理解为我们自己实现的Application文件里面做了较多的初始化操作,当这些初始化操作完成后才进入到第一个Activity,这段初始化的时间因为没有界面,应用便会因为主题的类别而显示白屏或者黑屏. 构成白屏/黑屏的原因代码如下: /*** @author

Xamarin.Android 启动页

打开软件的时候相当慢,会有白屏显示,这样的用户体验效果不好,所以需要增加一个启动页来过渡.步骤如下: 第一步:根据自己需求找到一个png图片,用于启动展示,放在Drawable 文件夹下,我这里命名为Loading.png. 第二步:在Drawable 文件夹下创建 splashscreen.xml,用于展示Loading.png. <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:andr