Android利用Viewpager实现开场的loading页

本文介绍了一种使用Viewpager实现的应用程序引导页方法,通过滑动展示多张图片,并利用小圆点指示当前页面,提供了完整的代码示例及布局文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个东西,口述一下吧,项目刚开始用到viewpager来滑动的loading,但是后来改成了MP4的视频loading。所以这个就给删除了一些东西。


口述实现后的效果,相信大家应该可以理解。


就是四张图,开场,有四个圆点,分别对应你现在的图,然后可以滑动,滑到头不能继续滑,不是循环滚动的一个。很多app都有用到这个。相信大家应该了解。


直接上代码吧:

public class TestActivity extends Activity {

    /**
     * Viewpager对象
     */
    private ViewPager viewPager;
    private ImageView imageView;
    /**
     * 创建一个数组,用来存放每个页面要显示的View
     */
    private ArrayList<View> pageViews;
    /**
     * 创建一个imageview类型的数组,用来表示导航小圆点
     */
    private ImageView[] imageViews;
    /**
     * 装显示图片的viewgroup
     */
    private ViewGroup viewPictures;

    /**
     * 导航小圆点的viewgroup
     */
    private ViewGroup viewPoints;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 取消标题
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 取消状态栏
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_test);
        LayoutInflater inflater = getLayoutInflater();
        pageViews = new ArrayList<View>();
        pageViews.add(inflater.inflate(R.layout.viewpager01, null));
        pageViews.add(inflater.inflate(R.layout.viewpager02, null));
        pageViews.add(inflater.inflate(R.layout.viewpager03, null));
        pageViews.add(inflater.inflate(R.layout.viewpager04, null));
        // 小圆点数组,大小是图片的个数
        imageViews = new ImageView[pageViews.size()];
        // 从指定的XML文件中加载视图
        viewPictures = (ViewGroup) inflater.inflate(R.layout.activity_test, null);

        viewPager = (ViewPager) viewPictures.findViewById(R.id.guidePagers);
        viewPoints = (ViewGroup) viewPictures.findViewById(R.id.viewPoints);

        // 添加小圆点导航的图片
        for (int i = 0; i < pageViews.size(); i++) {
            imageView = new ImageView(KegoalActivity.this);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));
            imageView.setPadding(5, 0, 5, 0);
            // 把小圆点放进数组中
            imageViews[i] = imageView;
            // 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是
            if (i == 0)
                imageViews[i].setImageDrawable(getResources().getDrawable(
                        R.drawable.page_indicator_focused));
            else
                imageViews[i].setImageDrawable(getResources().getDrawable(
                        R.drawable.page_indicator_unfocused));
            // imageviews添加到小圆点视图组
            viewPoints.addView(imageViews[i]);
        }

        setContentView(viewPictures);

        viewPager.setAdapter(new NavigationPageAdapter());
        // viewpager添加监听,当view发生变化时的响应
        viewPager.setOnPageChangeListener(new NavigationPageChangeListener());
    }


    // 导航图片view的适配器,必须要实现的是下面四个方法
    class NavigationPageAdapter extends PagerAdapter {

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

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

        // 初始化每个Item
        @Override
        public Object instantiateItem(View container, int position) {
            ((ViewPager) container).addView(pageViews.get(position));
            return pageViews.get(position);
        }

        // 销毁每个Item
        @Override
        public void destroyItem(View container, int position, Object object) {
            ((ViewPager) container).removeView(pageViews.get(position));
        }

    }

    // viewpager的监听器,主要是onPageSelected要实现
    class NavigationPageChangeListener implements ViewPager.OnPageChangeListener {

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageSelected(int position) {
            // 循环主要是控制导航中每个小圆点的状态
            for (int i = 0; i < imageViews.length; i++) {
                // 当前view下设置小圆点为选中状态
                imageViews[i].setImageDrawable(getResources().getDrawable(
                        R.drawable.page_indicator_focused));
                // 其余设置为飞选中状态
                if (position != i)
                    imageViews[i].setImageDrawable(getResources().getDrawable(
                            R.drawable.page_indicator_unfocused));
            }
        }

    }
}

然后就是布局,对应的布局如下:

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

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

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

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/viewPoints"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_marginBottom="15dp"
                android:gravity="center_horizontal"
                android:orientation="horizontal" >
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>
</FrameLayout>

还有就是使用到的viewpager01   -  04。这个很简单了,就是一个布局,背景是你用到的图片就ok了。


差不多就这样了,大家可以实现一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值