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) { }
});

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

效果展示





ViewPager引导页实现网络图片加载的更多相关文章

  1. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

  2. asp.net C#母版页和内容页事件排版加载顺序生命周期

    asp.net C#母版页和内容页事件排版加载顺序生命周期 关于ASP页面Page_Load发生在事件之前而导致的问题已经喜闻乐见,对于问题的解释也很全面,但是如何解决问题则较少有人说明,我就再 简单 ...

  3. Android之网络图片加载的5种基本方式

    学了这么久,最近有空把自己用到过的网络加载图片的方式总结了出来,与大家共享,希望对你们有帮助. 此博客包含Android 5种基本的加载网络图片方式,包括普通加载HttpURLConnection.H ...

  4. 55、Android网络图片 加载缓存处理库的使用

         先来一个普通的加载图片的方法. import android.annotation.SuppressLint; import android.app.Activity; import and ...

  5. ★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

    例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import ja ...

  6. ViewPager做图片浏览器,加载大量图片OOM的问题修正

    /** * @author CHQ * @version 1.0 * @date 创建时间: 2016/7/26 17:18 * @parameter * @return * 图片查看器 * //可以 ...

  7. android ImageView网络图片加载、动态设置尺寸、圆角..

    封装了一个关于ImageView的辅助类,该类可以方便实现网络图片下载的同时,动态设置图片尺寸.圆角.....一系列连贯的操作,无样式表,java代码实现所有功能,使用很方便. package com ...

  8. espcms列表页ajax无限加载

    类似百度图片的效果,滚动到底部后,点击加载更多,加载出第二页,第三页... 替代了传统的上一页,下一页,第几页,以达到在某些情况下使得用户体验更好. 二次开发方法: 1.先在模板文件中增加ajax文件 ...

  9. android 开发 - 网络图片加载库 Fresco 的使用。

    概述 Fresco 是 facebook 的开源类库,它支持更有效的加载网络图片以及资源图片.它自带三级缓存功能,让图片显示更高效. 介绍 Fresco 是一个强大的图片加载组件. Fresco 中设 ...

  10. IOS开发笔记 - 基于SDWebImage的网络图片加载处理

    前言: 在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...

随机推荐

  1. 立创EDA的使用

    立创EDA的使用 1.实验原理 最近在使用立创EDA来做电路作业,这里记录一下立创EDA的基本操作,以后小型的电路设计可以在其主页完成.立创EDA是一个可以线上完成电路设计仿真以及布线的免费设计工具, ...

  2. #对偶图最短路,网络流#洛谷 4001 [ICPC-Beijing 2006]狼抓兔子

    题目 网格图最小割\((n,m\leq 1000)\) 分析 首先网络流可以过,但是由于无向图,所以残量网络容量也为\(w\),\(Dinic\)玄学AC,代码就不贴了 那有没有其它方法呢,网格图显然 ...

  3. OpenHarmony源码解析之电话子系统——通话流程

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 王大鹏 深圳开鸿数字产业发展有限公司 一.简介 OpenAtom OpenHarmony(以下简称"Open ...

  4. 微服务集成Spring Cloud Zipkin实现链路追踪并集成Dubbo

    1.什么是ZipKin Zipkin 是一个根据 Google 发表的论文" Dapper" 进行开源实现的分布式跟踪系统. Dapper是Google 公司内部的分布式追踪系统, ...

  5. SQL ALTER TABLE 语句- 灵活修改表结构和数据类型

    SQL ALTER TABLE 语句 SQL ALTER TABLE 语句用于在现有表中添加.删除或修改列,也可用于添加和删除各种约束. ALTER TABLE - 添加列 要在表中添加列,请使用以下 ...

  6. C# Dictionary(数据字典)的基本用法

    C# Dictionary(数据字典)的基本用法 - Mr.Cat~ - 博客园 (cnblogs.com)   通常情况下,我们可以通过 int 类型的索引来从数组或者 List 集合中查询所需的数 ...

  7. Qt线程简单使用二:QObject~创建任务类

      需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999.   做法: 创建任务类,用来完成任务,创建子线程,将任务类放到子线程中,点击QPushButton后,先发送 ...

  8. 一个很好用的ORM库--peewee

    发现一个很好用的 ORM 库 -- peewee 以下为简单示例 from peewee import * db = SqliteDatabase('test.db') # 定义表结构 class P ...

  9. 实验2 C语言分支与循环基础应用编程

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 int main() { ...

  10. pycharm更换主题,pycharm更换皮肤,pycharm更换不同颜色

    1.首先  点击File→进入setting 2. 在settings里面找到appearance 3.选择 Theme,下拉即可修改 4.选择不同的主题,darcula是黑色,其他两个是白色