版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/sinat_25074703/article/details/82957570
1、瀑布流概述
淘宝、京东商城等电商平台的首页在下滑刷新的过程中会出现左右不对齐的效果,这种情况的产生主要是由商品类型决定的。不同类型的商品决定了其独特的展示方式,一般情况下会通过自营、满减、满折等标签+价格+描述呈现。鉴于商品的多样性和展示的复杂性,会形成不同的商品高低不一的视觉效果,下滑时错落有致地展示给人以瀑布般的美感,这就是我们要讲的瀑布流的概念。
2、瀑布流实现步骤
- 搭建Android开发平台创建项目并引入相关依赖包
- 实现基本开发框架
- 实现RecyclerView的适配器StaggeredAdapter
- 实现StaggeredEmptyViewHolder完成空数据展示
- 实现model模型StaggeredVO,以适配服务器数据
- 实现StaggeredFormalViewHolder完成正常数据展示
- 装载适配器StaggeredAdapter和StaggeredGridLayoutManager展示瀑布流
- 实现StaggeredItemDecoration定制分割线
3、搭建Android开发平台创建项目并引入相关依赖包
3.1 平台说明
本项目基于AndroidStudio3.0.1、Java1.8平台开发,如下图
3.2 创建项目
3.2.1 gradle版本说明
本项目使用相对稳定的2.2.3版本,如下代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// classpath 'com.novoda:bintray-release:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
gradle-wrapper.properties配置如下:
#Wed Mar 08 09:36:55 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
注意:local.properties采用默认值即可
3.2.2 编译工具版本配置及依赖说明
apply plugin: 'com.android.application' // this is a app
android {
compileSdkVersion 26
buildToolsVersion "26.0.3"
defaultConfig {
applicationId "com.edwin.idea" //package name but they are not identical
minSdkVersion 16 // 最小支持Android4.1版本
targetSdkVersion 26 // 目标版本是Android7.1.1
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//为flavor设置一个版本,命名是随意的
flavorDimensions "versionCode"
}
buildTypes {
debug {
minifyEnabled false