ViewPager引导页实现网络图片加载

ViewPager引导页实现网络图片加载

最近在准备移动应用开发的比赛,看到一道题目,让我们加载网络图片当引导页,我太久没做了,就搜了一下,大多数是让你有多少张图片就新建多少个布局文件,这样文件多不说,而且操作复杂。

1、准备插件

​ 首先了解一下Glide,这是一个能够快速加载网络图片的插件,非常好用,可以在网上看一下基本的教程

2、写好基本布局文件

​ 就是一个最基本的viewpager

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

​ 再加上指示器,我通过LinearLayout和CardView来制作指示器,这样更方便,我们有几张图片就建几个CardView

   <LinearLayout
        android:id="@+id/liner"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="100dp">
       
<!--        app:cardBackgroundColor="@color/white"  设置颜色-->
       
<!--        app:cardCornerRadius="15dp" 设置圆角-->
       
        <androidx.cardview.widget.CardView
            android:id="@+id/card1"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/liji_material_red_500"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
        <androidx.cardview.widget.CardView
            android:id="@+id/card2"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
        <androidx.cardview.widget.CardView
            android:id="@+id/card3"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
    </LinearLayout>

当滑到最后一页时要出现一个进入app的按钮,我们先隐藏这个按钮,最后一页再显示

    <Button
        android:visibility="gone"
        android:id="@+id/button"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:background="@color/bank_bg01"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="10dp"
        android:text="进入app"
        android:textColor="@color/white"
        android:layout_centerHorizontal="true" />

activity_steer.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=".ui.SteerActivity">
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <LinearLayout
        android:id="@+id/liner"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="100dp">
<!--        app:cardBackgroundColor="@color/white"  设置颜色-->
<!--        app:cardCornerRadius="15dp" 设置圆角-->
        <androidx.cardview.widget.CardView
            android:id="@+id/card1"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/liji_material_red_500"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
        <androidx.cardview.widget.CardView
            android:id="@+id/card2"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
        <androidx.cardview.widget.CardView
            android:id="@+id/card3"
            android:layout_width="30dp"
            android:layout_height="30dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="15dp"
            android:layout_marginHorizontal="5dp"/>
    </LinearLayout>
    <Button
        android:visibility="gone"
        android:id="@+id/button"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:background="@color/bank_bg01"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="10dp"
        android:text="进入app"
        android:textColor="@color/white"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

3、Activity逻辑

常规操作,先注册UI组件

    private ViewPager mViewpager;
    private LinearLayout mLiner;
    private Button mButton;
    private CardView card1;
    private CardView card2;
    private CardView card3;

绑定id

    private void initView() {
        mViewpager = (ViewPager) findViewById(R.id.viewpager);
        mLiner = (LinearLayout) findViewById(R.id.liner);
        mButton = (Button) findViewById(R.id.button);
        card1 = (CardView) findViewById(R.id.card1);
        card2 = (CardView) findViewById(R.id.card2);
        card3 = (CardView) findViewById(R.id.card3);
        mButton.setOnClickListener(this);
    }
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_steer);
        initView();
    }

创建包含网络图片链接的list

List<String> rows = new ArrayList<>();

新建adapter类,配置适配器

class adapter extends PagerAdapter {
        Context context;
        List<String> list;

        public adapter(Context context, List<String> list) {
            this.context = context;
            this.list = list;
        }

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

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            ImageView imageView = new ImageView(context);
            //适配ImageView宽高占满屏幕
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            //这里通过glide将图片加载进新建的ImageView中
            Glide.with(context).load(list.get(position)).into(imageView);
            //将新建的ImageView加载到视图组中
            container.addView(imageView);
            //这里返回图片就行,不要返回视图组,否则无法显示图片
            return imageView;
        }

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

设置适配器

adapter adapter = new adapter(getApplicationContext(), rows);
mViewpager.setAdapter(adapter);

创建一个控制CardView颜色的方法

 private void onChangeCardView(CardView card) {
     	//这是为了让ButtonView在每次切换不同页面是都是隐藏状态,好实现最后一页才出现的效果
        mButton.setVisibility(View.GONE);
        card1.setCardBackgroundColor(Color.WHITE);
        card2.setCardBackgroundColor(Color.WHITE);
        card3.setCardBackgroundColor(Color.WHITE);
        card.setCardBackgroundColor(Color.RED);
    }

设置ViewPager页面切换监听器

mViewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                        @Override
                        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                            switch (position) {
                                case 0:
                                    onChangeCardView(card1);
                                    break;
                                case 1:
                                    onChangeCardView(card2);
                                    break;
                                case 2:
                                    onChangeCardView(card3);
                                    mButton.setVisibility(View.VISIBLE);
                                    break;
                                default:
                                    break;
                            }
                        }

                        @Override
                        public void onPageSelected(int position) {

                        }

                        @Override
                        public void onPageScrollStateChanged(int state) {

                        }
                    });

这样就完成了引导页的制作了

效果展示



posted @ 2022-11-18 16:01  高同学,你好  阅读(102)  评论(0编辑  收藏  举报