使用compose和WheelView实现仿IOS中的3D滚轮控件-三级联动

1、资源准备:

省-市-区/县 三级资源下载
wheelView依赖模板下载
在资源②中,下载后,将其中的wheelview模块通过Import Module from Source导入自己的项目中。

2、实现效果

在这里插入图片描述

3、导入wheelview模块

3.1 问题与解决

3.1.1 问题1-插件找不到

问题:
在导入wheelview后,会出现找不到com.github.dcendents.android-maven的问题

解决:

在wheelview模块的build.gradle中将
apply plugin: ‘com.github.dcendents.android-maven’
修改为

apply plugin: 'maven-publish'

3.1.2 问题2-未定义内存空间namespace

在build.gradle的android {}中添加代码

     namespace =  "com.contrarywind.view"

3.2 添加依赖

在app的buid.gradle中添加

 implementation(project(":wheelview"))

4、解析json文件

4.1 修改json文件

将下载的json资源文件存放在assets文件夹中,并修改json文件为DistrictCityJson.json,结构为

{
   
   
  "data_version": "1.0.0",
  "districts":
{
   
   
{
   
   "北京市":{
   
   "市辖区":["东城区" //为下载的资源文件,也可以不修改,那就需要将下方数据转换的数据结构修改一下
}

的形式。

4.2 转换json文件中数据

创建需要的数据结构,其中RegionData表示的是获取json的数据结构,可通过Gson().fromJson方法将json文件转为实体数据。
RegionResponse为后续方便使用的数据结构,层次结构,方便wheelView使用

data class RegionData(
    val data_version: String,
    val districts: Map<String, Map<String, List<String>>>
)
data class RegionResponse(
    val data_version: String,
    val districts: List<District>
)

data class District(
    val name: String,
    val level: Int,         // 1:省/直辖市 2:市 3:区县
    val districts: List<District>  = emptyList()
)

object RegionDataParser {
   
   

    // 方法1:直接解析为Map结构
    fun parseRegionDataFromAssets(context: Context, fileName: String): RegionData {
   
   
        return try {
   
   
            val jsonString = context.assets.open(fileName)
                .bufferedReader()
                .use {
   
    it.readText() }
            Gson().fromJson(jsonString, RegionData::class.java)
        } catch (e: IOException) {
   
   
            throw RuntimeException("Could not read $fileName from assets", e)
        }
    }
       //方法2:将原始数据转为层级的结构
    fun parseStructuredRegionsFromAssets(context: Context, fileName: String): RegionResponse {
   
   
       val originalList : RegionData =  parseRegionDataFromAssets(context,fileName)
        return RegionResponse(
            data_version = originalList.data_version,
            districts = originalList.districts.map 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值