android-引导页的实现方式

很多应用第一次用的时候都会出现引导页,出现的方式大致都是:
第一次启动:启动页->引导页->主页
以后启动:启动页->主页
今天要做的应用当然有以上的功能,但在此基础上,我将会添加一个功能,就是在设置页再次查看引导页的内容。毕竟每次运行后又不是看那些美美哒引导页了,只能清除应用数据才能再次看,这是一件很麻烦的事情。


效果图

第一次运行:
效果解析:第一次运行会进入引导页,以后再次运行将不会进入引导页
在引导页的下面有3个点,表示有三页,跳到第几页,相对应的点就会亮起
第一次运行

在设置页查看引导页:
效果解析:不是第一次运行的时候,可以在设置页面再次查看引导页
在设置页面查看引导页

思路篇

  • 引导页效果

    滑动效果我们不解释直接viewpager
    我们得让手机知道是不是第一次运行这个应用,然后在决定是否进入引导页。 恩~,。。!。。。有思路了,我们可以在手机里面创建一个文件来记录数据,然后在手机打开的时候读取该数据,当数据满足某种条件的时候,就进入引导页,不满足的时候,就直接进入主页。那么,问题来了!

    1. android那么多存储方式,到底用哪种呢?
    2. 数据类型有那么多中,我该用哪个数据类存储呢?

    好吧,我们知道存储方式有很多Filea ,SQLite,sharedpreference等等。决定存储方式,主要还是要根据数据来决定,所以我们先解决第二个问题,存储哪种数据,首先,手机只需要知道应用是否是第一次运行就对了,是!否!,你懂的,boolean类型的没跑了。那么数据类型已经决定了,现在让我们来想想应该用哪种存储方式,我们只需要存储一个简单的Boolean,应该只需要用一个轻量级的存储方式吧,sharedpreference。就你了!然后在跳转的主页之后的一刹那,把数据写进手机里面。

  • 引导页下面的点的实现方式

    首先我们得要点吧,点的实现方式有很多种,最简单的方式就是百度找几个点,当然我们也可以自己用代码做2个点,我为了方便就直接百度2个点吧。
    点1:点1 点2:点2
    当滑动结束的时候就改变点的颜色。所以我们需要在滑动那里添加一个事件监听。当滑动结束后,就改变点。

实现篇

启动页的实现

启动页:
类名:WelcomeActivity
解决问题:启动页的延迟,应该进入主页还是引导页
解决方法:

        //获取手机里面名为XX的文件
        SharedPreferences preferences = getSharedPreferences(DataUtil.sharedPreferenceFile, MODE_PRIVATE);
        //获取文件中的XX所对应的布尔值,如果没有则默认为true
        isFirstIn = preferences.getBoolean(DataUtil.isFirstInKey, true);
        //如果该值为真则进入引导页,否则进入主页
        if (isFirstIn) {
            mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
        } else {
            mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);
        }

handler代码:

private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case GO_GUIDE:
                    goGuide();
                    break;
                case GO_HOME:
                    goHome();
                    break;
            }
        }
    };

引导页的实现
类名:GuideActivity
解决问题:引导页的滑动和滑动后点的变化
解决方法:
首先需要一个带有3个点和viewpager的布局和3个引导页的布局。第三个布局有一个跳过的按钮。
在代码文件中将相应的控件进行绑定后,进入正题。
通过LayoutInflater获取3个布局,并声明一个view集合,将这三个布局一一装进去

        LayoutInflater inflater = getLayoutInflater();
        view1 = inflater.inflate(R.layout.guide_item1, null);
        view2 = inflater.inflate(R.layout.guide_item2, null);
        view3 = inflater.inflate(R.layout.guide_item3, null);
        //layoutData为集合名
        layoutData.add(view1);
        layoutData.add(view2);
        layoutData.add(view3);

设置一个pageradapter

        adapter = new PagerAdapter() {
            @Override
            public int getCount() {
                return layoutData.size();
            }
            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                View view = layoutData.get(position);
                container.addView(view);
                return view;
            }
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(layoutData.get(position));
            }
        };
        viewPager.setAdapter(adapter);

点的变化
为viewpager设置监听,只实现onPageSelected(int position)方法,该方法在viewpager滑动结束后调用
改变点的思路为:选中对应的页后改变对应的点,其他页的点变为灰色。
以上思路太为复杂,所以放弃。
改变点的思路为:无论选中哪一页,将所有点都变为灰色后,再点亮对应页的点。
首先写一个将所有点都变为灰色的方法。

private void clearDots() {
        icon1.setImageResource(R.drawable.adware_style_default);
        icon2.setImageResource(R.drawable.adware_style_default);
        icon3.setImageResource(R.drawable.adware_style_default);
}

然后在onPageSelected(int position)方法里面。

    @Override
     public void onPageSelected(int position) {
        clearDots();
        icons[position].setImageResource(R.drawable.adware_style_selected);
    }

这样可以轻松实现点亮对应点的功能

数据存储
我们在最后一页引导页的跳过按钮那里,实现数据存储。
绑定跳过按钮,因为在第三个布局里面,所以,我们的绑定方式为:

skip = (TextView) view3.findViewById(R.id.skip);

再在这个按钮上实现监听,部分内容:

    SharedPreferences preferences = getSharedPreferences(DataUtil.sharedPreferenceFile, MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean(DataUtil.isFirstInKey, false);
    editor.commit();

这样就存储了数据,当点击跳过按钮后,手机里面会建立一个文件,文件里面的值为false,下次再打开就不会进入引导页了。

在设置页面重新查看引导页
如果什么都不做,直接通过按钮跳转到引导页,后果就是,再次启动了主页,所以不能简单的通过StartActivity进入引导页,那么这里,我们需要使用一些小手段,从intent入手。
我们让引导页知道是哪个界面跳来的,如果是启动页跳进来的,就正常启动,该读取数据读取数据,该存储数据存储数据,总之该干嘛干嘛,如果是别的页面跳进来的,就不需要存储数据,只是一个单纯的跳转。
所以现在我们要让引导页知道是否是启动页启动的,怎么告诉引导页呢,答案很简单,只需要在启动页跳转到引导页的同时,给引导页发送一个数据就可以了。代码如下:

        intent.setClass(this, GuideActivity.class);
        intent.putExtra("welcome", true);
        startActivity(intent);
        finish();

引导页,跳转按钮监听处:

     Intent intent1 = getIntent();
     boolean isWelcomeIn = intent1.getBooleanExtra("welcome", false);
     if (isWelcomeIn) {
         Intent intent = new Intent(getApplicationContext(), MainActivity.class);
         startActivity(intent);
         SharedPreferences preferences = getSharedPreferences(DataUtil.sharedPreferenceFile, MODE_PRIVATE);
         SharedPreferences.Editor editor = preferences.edit();
         editor.putBoolean(DataUtil.isFirstInKey, false);
         editor.commit();
     }
    finish();

通过以上方法就可以让引导页知道引导页是否是从启动页启动的。

源码资源:http://download.csdn.net/detail/it_xf/9515340

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio引导实现可以通过以下步骤完成: 1. 创建一个新的Android Studio项目。 2. 在项目中创建一个新的Activity,用于显示引导。 3. 在引导Activity中添加一个ViewPager控件,用于显示多个面。 4. 创建一个PagerAdapter类,用于管理ViewPager中的面。 5. 在PagerAdapter中添加需要显示的面,可以使用布局文件或代码方式创建。 6. 在引导Activity中添加一个指示器控件,用于显示当前面的位置。 7. 在ViewPager的OnPageChangeListener中更新指示器的位置。 8. 在最后一个面中添加一个按钮,用于跳转到主界面或登录界面。 9. 在按钮的点击事件中跳转到相应的界面。 以上就是Android Studio引导实现的基本步骤,可以根据具体需求进行调整和扩展。 ### 回答2: 引导在移动应用中是一个非常重要的组件,它可以帮助用户更好地了解应用程序的功能和使用,提高用户的体验和满意度。Android Studio提供了良好的支持来实现应用程序的引导实现步骤如下: 1.创建一个新项目 在Android Studio中创建一个新项目。在创建项目的过程中,可以选择空白活动,在项目创建后再进行引导的添加。 2.设计引导 准备好需要展示的引导图片,并按照设计图的要求进行切图、编辑等操作。 3.创建视图控件 打开activity_main.xml文件,并添加ViewPager和CircleIndicator视图控件,用于展示引导和指示当前展示的引导的位置。ViewPager需要用Adapter进行管理,并创建好相应的Fragment或者View视图。 4.创建引导适配器 创建一个继承自PagerAdapter的适配器类,用于管理ViewPager中展示的引导视图控件。在适配器中需要重写getCount()方法,返回需要展示的引导数量;getItem()方法,返回某一个特定位置的引导视图控件;以及isViewFromObject()方法,用于判断某个视图控件是否为某一视图。 5.添加动画效果 在不同的引导之间需要添加相应的动画效果,以便让用户更加吸引和留意。可以使用Android中提供的Animator、ObjectAnimator等动画技术实现需要的动画效果。 6.完善引导功能 在ViewPager中添加事件监听器,以便在规定条件下实现面跳转和引导的最终目标。 7.测试 在完成代码编写后需要进行测试,并检查引导中的所有功能是否正常工作。以便在发布应用时达到最佳效果。 总之,通过上述步骤的操作,可以在Android Studio中很轻松地实现一个流畅、功能完备的引导。这将有助于提高用户体验和应用程序的使用率。 ### 回答3: 在开发Android应用时,经常需要添加引导来给用户介绍应用的基本功能和操作方法。本文将以Android Studio为例,介绍如何实现引导。 一、创建项目 首先打开Android Studio,点击“Start a new Android Studio project”,选择“Empty Activity”,输入“App name”和“Package name”,点击“Finish”创建项目。 二、添加引导 1、步骤一 在“app”文件夹下,右键点击“res”,选择“New”-“Android Resource File”,设置“Resource type”为“layout”,命名为“activity_main.xml”(这里取名为activity_main.xml是为了后面直接复制粘贴代码方便)。 2、步骤二 右键点击“res”文件夹,选择“New”-“Folder”-“Values Folder”,命名为“values-w820dp”(这个文件夹的作用是为了适配平板设备),在该文件夹下创建一个名为“dimens.xml”的布局文件,在该文件中添加以下代码: ``` <resources> <dimen name="tutorial_image_size">450dp</dimen> <dimen name="tutorial_image_padding">30dp</dimen> <dimen name="tutorial_title_size">20sp</dimen> <dimen name="tutorial_title_padding_top">30dp</dimen> <dimen name="tutorial_description_size">14sp</dimen> <dimen name="tutorial_description_padding_top">10dp</dimen> <dimen name="tutorial_button_padding_top">50dp</dimen> <dimen name="tutorial_button_size">50dp</dimen> </resources> ``` 3、步骤三 在“res”文件夹下创建一个名为“drawable”的文件夹,将要使用的引导图片拷贝到该文件夹下。 4、步骤四 在“res”文件夹下创建一个名为“values”的文件夹,在该文件夹下创建一个名为“colors.xml”的布局文件,在该文件中添加以下代码: ``` <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="colorTutorialBackground">#FFFFFF</color> </resources> ``` 5、步骤五 在“res”文件夹下创建一个名为“drawable”的文件夹,在该文件夹下创建一个名为“gradient_tutorial_background.xml”的布局文件,在该文件中添加以下代码: ``` <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="@color/colorPrimary" android:endColor="@color/colorPrimaryDark" android:angle="135" /> </shape> ``` 6、步骤六 在“res”文件夹下创建一个名为“layout”的文件夹,在该文件夹下创建一个名为“item_viewpager_tutorial.xml”的布局文件,在该文件中添加以下代码: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorTutorialBackground" android:orientation="vertical" android:padding="@dimen/tutorial_image_padding"> <ImageView android:id="@+id/imageViewPagerTutorial" android:layout_width="@dimen/tutorial_image_size" android:layout_height="@dimen/tutorial_image_size" android:layout_gravity="center_horizontal" android:layout_marginBottom="@dimen/tutorial_title_padding_top" android:src="@drawable/tutorial1" /> <TextView android:id="@+id/tvTitleViewPagerTutorial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/tutorial_title_padding_top" android:text="Title" android:textColor="#000000" android:textSize="@dimen/tutorial_title_size" /> <TextView android:id="@+id/tvDescriptionViewPagerTutorial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/tutorial_description_padding_top" android:text="Description" android:textColor="#000000" android:textSize="@dimen/tutorial_description_size" /> <Button android:id="@+id/btnSkipViewPagerTutorial" android:layout_width="@dimen/tutorial_button_size" android:layout_height="@dimen/tutorial_button_size" android:layout_gravity="right" android:background="@null" android:paddingTop="@dimen/tutorial_button_padding_top" android:text="Skip" android:textColor="#000000" /> </LinearLayout> ``` 7、步骤七 在“res”文件夹下创建一个名为“layout”的文件夹,在该文件夹下创建一个名为“activity_view_pager_tutorial.xml”的布局文件,在该文件中添加以下代码: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/gradient_tutorial_background"> <androidx.viewpager.widget.ViewPager android:id="@+id/viewPagerTutorial" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> ``` 三、编写代码 1、步骤一 打开“MainActivity.java”文件,添加以下代码: ``` public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); boolean isFirstTime = MyPreferences.isFirst(MainActivity.this); if (isFirstTime) { startActivity(new Intent(MainActivity.this, ViewPagerTutorialActivity.class)); finish(); } } } ``` 2、步骤二 创建一个名为“MyPreferences”的Java类,在该类中添加以下代码: ``` public class MyPreferences { private static final String FIRST = "first"; private static SharedPreferences getSharedPreferences(Context context) { return context.getSharedPreferences("MyPreferences", MODE_PRIVATE); } public static void setFirst(Context context, boolean value) { SharedPreferences.Editor editor = getSharedPreferences(context).edit(); editor.putBoolean(FIRST, value).apply(); } public static boolean isFirst(Context context) { return getSharedPreferences(context).getBoolean(FIRST, true); } } ``` 3、步骤三 创建一个名为“ViewPagerTutorialActivity”的Java类,在该类中添加以下代码: ``` public class ViewPagerTutorialActivity extends AppCompatActivity { int[] tutorialImages = {R.drawable.tutorial1, R.drawable.tutorial2, R.drawable.tutorial3}; String[] titles = {"Title 1", "Title 2", "Title 3"}; String[] descriptions = {"Description 1", "Description 2", "Description 3"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager_tutorial); ViewPager viewPager = findViewById(R.id.viewPagerTutorial); TutorialViewPagerAdapter adapter = new TutorialViewPagerAdapter(this, tutorialImages, titles, descriptions); viewPager.setAdapter(adapter); Button btnSkip = findViewById(R.id.btnSkipViewPagerTutorial); btnSkip.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MyPreferences.setFirst(ViewPagerTutorialActivity.this, false); startActivity(new Intent(ViewPagerTutorialActivity.this, MainActivity.class)); finish(); } }); } } ``` 4、步骤四 创建一个名为“TutorialViewPagerAdapter”的Java类,在该类中添加以下代码: ``` public class TutorialViewPagerAdapter extends PagerAdapter { private Context context; private int[] images; private String[] titles; private String[] descriptions; private LayoutInflater layoutInflater; public TutorialViewPagerAdapter(Context context, int[] images, String[] titles, String[] descriptions) { this.context = context; this.images = images; this.titles = titles; this.descriptions = descriptions; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return images.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = layoutInflater.inflate(R.layout.item_viewpager_tutorial, container, false); ImageView imageView = view.findViewById(R.id.imageViewPagerTutorial); TextView tvTitle = view.findViewById(R.id.tvTitleViewPagerTutorial); TextView tvDescription = view.findViewById(R.id.tvDescriptionViewPagerTutorial); Button btnSkip = view.findViewById(R.id.btnSkipViewPagerTutorial); imageView.setImageResource(images[position]); tvTitle.setText(titles[position]); tvDescription.setText(descriptions[position]); if (position == getCount()-1) { btnSkip.setText("Finish"); } container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } ``` 至此,Android Studio引导实现就完成了。在运行项目时,第一次打开应用会显示引导,用户按下Skip按钮,或者直接滑到最后一,点击Finish按钮进入主界面。之后再打开应用,就不会再显示引导了,因为已经保存了用户的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值