关于应用程序的开机启动界面

原创 2015年11月18日 22:44:59
平时我们在使用app的时候,会发现,大多数软件都有开机启动的效果,比较常见的有两种
第一种: 就是界面从透明慢慢显示,这也是比较简单的一种。
第二种: 就是界面上左右滑动的效果,到达最后一种的时候点击进入主界面,这是一种相对复杂的效果。

下面,从第一种效果讲起

创建activity_start.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@mipmap/ic_launcher" />
</LinearLayout>
定义开机启动的类,StartActivity.java
```

package com.example.glc.testtabfragments;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.LinearLayout;

/**
* Created by GLC on 2015/11/18.
*/
public class StartActivity extends Activity implements Animation.AnimationListener {
LinearLayout linearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);
    //定义透明度的显示动画,从0.3到1完全显示
    AlphaAnimation alphaAnimation = new AlphaAnimation(0.3f, 1f);
    alphaAnimation.setDuration(3000);
    linearLayout = (LinearLayout) this.findViewById(R.id.root_layout);
    //定义动画持续的时间为3000毫秒
    alphaAnimation.setAnimationListener(this);
    linearLayout.setAnimation(alphaAnimation);

}

//以下三个方法都是监听动画的必须实现的方法
@Override
public void onAnimationStart(Animation animation) {

}
@Override
public void onAnimationEnd(Animation animation) {

    Intent intent = new Intent(StartActivity.this, GuidActivity.class);
    startActivity(intent);
    finish();
}

@Override
public void onAnimationRepeat(Animation animation) {

}

}

        需要注意的是我们需要在Manifest.xml文件中设置StartActivity.java为启动项。

    这样我们的第一种方式就已经实现好了,现在来继续实现第二种方式。

    首先我们需要定义一个activity_guid.xml,用来显示引导页面,

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="15dp"
        android:gravity="center"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:src="@drawable/guide_point"

            />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:src="@drawable/guide_point" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:src="@drawable/guide_point" />
    </LinearLayout>
</RelativeLayout>

然后我们定义 第一个滑动页面

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f6675f">

    <ImageView
        android:paddingTop="50dip"
        android:paddingBottom="100dip"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerInside"
        android:src="@mipmap/gohome" />

</RelativeLayout>
第二,三个页面类似,只是换了图片,这里不做过多介绍,主要的还是在java代码中实现。
代码中,我们首先是定义了一个ViewPager控件,我们这里先初始化它,得到对象,然后设置Viewpager的适配器,这里我们需要继承PagerAdapter,
 private class MyPageAdapter extends PagerAdapter {
        //获取当前窗体的界面数
        @Override
        public int getCount() {
            return pagers.size();
        }
        //判断是否由对象生成界面
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
        //将当前界面移除
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(pagers.get(position));
        }
        //选择界面加入窗体中
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(pagers.get(position));
            return pagers.get(position);
        }
    }
我们需要初始化我们的三个界面
 pagers.add(getLayoutInflater().inflate(R.layout.guid_one, null));
        pagers.add(getLayoutInflater().inflate(R.layout.guid_two, null));
        View guidThree = getLayoutInflater().inflate(R.layout.guid_three, null);
        pagers.add(guidThree);
最后我们将viewpager与设配器绑定起来,并且设置OnPageChangeListener,并且实现必要的方法。
 @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        setCurrentPoint(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

关于我们的Viewpager下面的三个小圆圈,我们需要设置选中的属性,guide_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@mipmap/guide_point_seleced" android:state_enabled="true" />
    <item android:drawable="@mipmap/guide_point" android:state_enabled="false" />
</selector>

然后再代码中配置。


//这个方法用于初始化三个小圆圈,第一个为enabled状态,其他两个都为false状态
    public void initPoint() {
        ll = (LinearLayout) findViewById(R.id.ll);
        points = new ImageView[pagers.size()];
        for (int i = 0; i < points.length; i++) {
            points[i] = (ImageView) ll.getChildAt(i);
            points[i].setEnabled(false);
        }
        points[0].setEnabled(true);
    }
//这个方法用于设置当前的小圆圈的状态,并且需要在onPageSelected方法中调用
  public void setCurrentPoint(int position) {
        for (int i = 0; i < points.length; i++) {
            if (position == i) {
                points[i].setEnabled(true);
            } else {
                points[i].setEnabled(false);
            }
        }

最后贴上完整的代码。

package com.example.glc.testtabfragments;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by GLC on 2015/11/18.
 */
public class GuidActivity extends Activity implements View.OnClickListener, ViewPager.OnPageChangeListener {

    private MyPageAdapter myPageAdapter;
    private List<View> pagers = new ArrayList<>();
    private ViewPager mViewPager;
    private ImageView[] points;
    private LinearLayout ll;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guid);
        init();
        initPoint();
    }


    private void init() {
        pagers.add(getLayoutInflater().inflate(R.layout.guid_one, null));
        pagers.add(getLayoutInflater().inflate(R.layout.guid_two, null));
        View guidThree = getLayoutInflater().inflate(R.layout.guid_three, null);
        pagers.add(guidThree);
        TextView tv_start = (TextView) guidThree.findViewById(R.id.start_app);
        tv_start.setOnClickListener(this);

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        myPageAdapter = new MyPageAdapter();
        mViewPager.setAdapter(myPageAdapter);
        mViewPager.setOnPageChangeListener(this);

    }

    public void initPoint() {
        ll = (LinearLayout) findViewById(R.id.ll);
        points = new ImageView[pagers.size()];
        for (int i = 0; i < points.length; i++) {
            points[i] = (ImageView) ll.getChildAt(i);
            points[i].setEnabled(false);
        }
        points[0].setEnabled(true);
    }

    public void setCurrentPoint(int position) {
        for (int i = 0; i < points.length; i++) {
            if (position == i) {
                points[i].setEnabled(true);
            } else {
                points[i].setEnabled(false);
            }
        }
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(GuidActivity.this, MainActivity.class);
        startActivity(intent);

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        setCurrentPoint(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    private class MyPageAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return pagers.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(pagers.get(position));
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(pagers.get(position));
            return pagers.get(position);
        }
    }
}

这里我们的第二种启动app的方式也完成了。

创建一个没有任何界面的后台程序并且设置为开机启动

Windows系统下常见的程序类型有3种,第一种是最常见的WinForm类型的,第二种是控制台Console类型的,第三种是Windows Service类型的。   在我们编写一个程序的时候,如果...
  • sundacheng1989
  • sundacheng1989
  • 2015年12月17日 09:33
  • 1382

修改嵌入式linux启动画面(一)

linux的开机动画默认为一只80x80的小企鹅,在driver/video/logo下面。但是在实际的开发应用中,我们常常需要做的是更改系统默认的开机启动画面,更换企业的特有logo图片。    说...
  • peitianmeng
  • peitianmeng
  • 2014年03月09日 19:56
  • 2836

linux修改启动界面

Linux字符界面切换到图形界面  由字符界面切换到图形界面可用两种简单方法实现:  1、在字符界面输入startx或init 5 。  2、通过编辑/etc/inittab文件实现默认进入图形界面...
  • zhuixunhebe1
  • zhuixunhebe1
  • 2014年03月08日 10:10
  • 817

Ubuntu 12.04新装后启动时长时间停留在开机画面的解决办法

问题: 解决办法:
  • David_xtd
  • David_xtd
  • 2014年05月20日 20:03
  • 18472

ARM Linux 更新启动画面

启动画面(Splash Screen)是指在Linux启动时候显示的图片,通常默认情况下Linux只是输出一些传统的小企鹅图标和启动Console命令行,但嵌入式设备都需要定制自己开机画面,这里就以T...
  • toradexsh
  • toradexsh
  • 2016年01月29日 15:42
  • 694

Android 开机界面及Linux内核启动界面的修改(tiny6410)

第一开机界面替换,即内核bootloader启动小企鹅界面更换   1、首先找一个自定义120*120的png图像,这里名称linux.png,但是后面的ppm名称必须是图中所示 在linux下执行下...
  • HowieXue
  • HowieXue
  • 2016年05月06日 11:21
  • 1693

Linux开发板下自动开机时启动应用程序

这几天在玩zturn开发板,发现开发板中的例程非常好玩,我就研究了下Linux下应用程序子启动问题,发现网上说法不一,下边总结一下我自己在Linux开发板下自动开机时启动应用程序的过程,与大家分享一下...
  • wendellluntan
  • wendellluntan
  • 2017年06月09日 10:21
  • 645

解决:Android模拟器一直停留在开机画面

之前一直都用不了Android4.1.2的模拟器,总是停留在开机画面,一直进不去 后来经过一番研究,发现网上所谓的改什么Scale display to real size, 勾选snapshot等...
  • wjl15989
  • wjl15989
  • 2013年07月15日 10:54
  • 13326

嵌入式linux开机应用程序自启动

注意:/etc/profile文件只在登陆用户后,才会执行。并且每个用户登陆,都会进行一次。 由/etc/init.d/rcS-->/etc/init.d/rc知道,需要添加的程序可...
  • c19911027
  • c19911027
  • 2015年06月12日 09:48
  • 5239

CentOS-7设置开机进入文本界面(不进入图形界面)

CentOS-7设置开机进入文本界面(不进入图形界面)
  • test1280
  • test1280
  • 2017年03月18日 12:05
  • 1161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于应用程序的开机启动界面
举报原因:
原因补充:

(最多只允许输入30个字)