Android引导页实现

我们在第一次使用一个app的时候或多或少都会有引导页的存在,在这个帖子中我已经整理好了相关的类容

下面是部分截图

先创建一个空的activity叫StartActivity里面的代码为

public class StartActivity extends AppCompatActivity {

    private ViewPager startViewpager;
    public List<View> introductionList;
    private IntroductionAdapter introductionAdapter;
    private Button cButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        initView();
        initAdapter();
        initClick();
    }

    /**
     * 初始化数组将引导页添加到数组里去
     */
    private void initView() {
        startViewpager = findViewById(R.id.start_viewpager);
        introductionList = new ArrayList<>();
        introductionList.add(getView(R.layout.introduction_a));
        introductionList.add(getView(R.layout.introduction_b));
        introductionList.add(getView(R.layout.introduction_c));

    }

    /**
     * 初始化适配器
     */
    private void initAdapter() {
        introductionAdapter = new IntroductionAdapter(introductionList);
        startViewpager.setAdapter(introductionAdapter);
    }

    /**
     * 初始化布局填充器把上面数组里的布局添加到这里面去
     */
    private View getView(int resId) {
        View view = LayoutInflater.from(this).inflate(resId, null);
        return view;
    }

    /**
     * 初始化尾页的点击事件
     */
    private void initClick() {
       cButton=introductionList.get(2).findViewById(R.id.c_button);
       cButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Toast.makeText(StartActivity.this, "测试点击", Toast.LENGTH_SHORT).show();
           }
       });
    }
}

创建适配器 IntroductionAdapter 并且继承PagerAdapter

public class IntroductionAdapter extends PagerAdapter {

    private List<View>pageList;

    /**
     * 这里面的list是从java代码里传递过来的list*/
    public IntroductionAdapter(List<View>list){
        this.pageList=list;
    }

    /**
     * @return ViewPager
     * 返回一共有多少个子页面,将需要展示的页面存到数组里然后返回长度,在ViewPager创建后自动执行只会执行一次
     * */
    @Override
    public int getCount() {
        return pageList.size();
    }

    /**
     * ViewPager里面对每个页面的管理是key-value形式的,也就是说每个page都有个对应的id(id是object类型),需要对page操作的时候都是通过id来完成的
     *
     * 这个函数就是用来告诉框架,这个view的id是不是这个object。
     * 谷歌官方推荐把view当id用,所以常规的instantiateItem()函数的返回值是你自己定义的view,而isViewFromObject()的返回值是view == object。
     * */
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view==object;
    }

    /**
     * 这是pageAdapter里的函数,功能就是往PageView里添加自己需要的page。同时注意它还有个返回值object,这就是那个id。
     *
     * ViewPager会预加载子页面
     *      *    在预加载时会自动调用这个方法
     *      *    虽然一共有几个子页面已经知道了,但这些页面并未创建出来
     *      *    我们要在这个方法中创建子页面 并且将要展示的内容添加到子页面中
     *      * ② 当ViewPage第一次加载时会执行这个函数并且执行两次
     *      *    第一次执行加载第0页面, 第二次执行加载第1页
     *      * ③ 当从第0页滑动到第1页后 会触发这个函数 预加载第2页
     *      *    当从第1页滑到第2页后  会触发这个函数 预加载第3页
     *      *    以类此推
     *      *    同理,反向滑动也是一样的
     *
     *      * ④ 这个方法要返回预加载的子页面要显示的组件对象
     *      * @param container 使用这个适配器的 ViewPager 对象
     *      * @param position 预加载页面(要创建的页面)的编号(从0开始计)
     *      * @return 预加载的子页面要显示的组件对象
     *
     * */
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View view=pageList.get(position);
        container.addView(view);
        return view;
    }

    /**
     * ① 这个方法用来销毁某个子页面释放资源
     * ② 当刚进入 ViewPager 时 这时已经加载了 0号页与1号页
     *    此时用户处于0号页 用户可能还要滑到1号页 此时哪个页面都不会销毁
     * ② 当用户从0号页滑到1号页 这时已加载的页面时 0、1、2 页
     *    此时用户即可能滑到 0号页 也可能滑到 2号页  所以也不会触发这个函数
     * ③ 当用户从 1号页 滑到 2号页 此时已加载的有  0、1、2、3 页
     *    用户处于 2号页 不可能会直接滑到0号页 所以,此时会触发这个函数来销毁 0号页
     *    通过这个规律 我们就能知道这个方法何时会调用了
     * @param container 使用这个适配器的 ViewPager 对象
     * @param position 要销毁的页面编号
     * @param object 在 instantiateItem()方法 中 return的组件对象会传给它
     */
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
       /**
        * 根据 object 删除子页面
        *子页面都是以 k-v 的形式管理的
        *而 instantiateItem()方法 return的对象就是当时创建的那个子页面的key,所以destroyItem()方法的第三个参数就是页面的key
        * 所以可以根据第三个参数销毁子页面*/
       container.removeView(pageList.get(position));

    }

}

在androidmainfest文件中修改首页启动

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Lightbrigade">


        <activity android:name=".activities.StartActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity" android:exported="true" />
    </application>

</manifest>

在activity_start.xml中添加布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.StartActivity"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/start_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>
</RelativeLayout>

创建三个引导页 introduction_a

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


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="引导页A"
        android:textSize="50sp"
        />
</LinearLayout>

introduction_b

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


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="引导页B"
        android:textSize="50sp"
        />

</LinearLayout>

introduction_c

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


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="引导页C"
        android:textSize="50sp"
        />

    <Button
        android:id="@+id/c_button"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="立即体验"
        android:textSize="20sp"
        android:textColor="@color/black"
        />
</LinearLayout>

编译安装即可

工程目录截图
在这里插入图片描述

gitee 地址:

  • 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、付费专栏及课程。

余额充值