Android:实现高德地图首页效果(下)

大家好,我是似曾相识2022。不喜欢唱跳篮球,但对杰伦的Rap情有独钟。

书接上文Android:实现高德地图首页效果(上),咱们讲到能不能通过滑动监听玩出新花样,答案是能。但这里不再是通过NestedScrollView 添加滑动监听,而是交给咱们的BottomSheetBehavior

由于BottomSheetBehavior是在xml中配置,那么我们要怎么拿到它呢?内部提供了from方法:

ini 复制代码
val bottomSheetBehavior = BottomSheetBehavior.from(scrollView)

拿到BottomSheetBehavior 后通过addBottomSheetCallback添加监听。需要实现两个方法:

less 复制代码
public abstract static class BottomSheetCallback {
  //newState 状态变化,也就是隐藏、展开、半展开等状态
  public abstract void onStateChanged(@NonNull View bottomSheet, @State int newState);
  //slideOffset 0-1的一个比例值  代表当前位置高度占比
  public abstract void onSlide(@NonNull View bottomSheet, float slideOffset);
}

看到这里,大家应该知道应该怎么操作了,主要还是集中在onSlide 方法中拿到slideOffset值,根据该值的变化做对应效果展示。

首先,XML中添加搜索框等元素:

ini 复制代码
<com.google.android.material.textfield.TextInputEditText
    android:id="@+id/search_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:background="@null"
    android:drawableStart="@drawable/ic_search_grey"
    android:drawablePadding="8dp"
    android:gravity="center_vertical"
    android:hint="搜索关键词"
    android:imeOptions="actionSearch"
    android:maxLines="1"
    android:padding="10dp"
    android:singleLine="true"
    android:textColor="@color/text_color_1"
    android:textSize="15dp" />
    
 <TextView
        android:id="@+id/homeView"
        android:text="渐变"
        android:gravity="center"
        android:background="@drawable/shape_white"
        android:drawableLeft="@drawable/ic_chip_home"
        android:drawablePadding="6dp"
        android:layout_width="wrap_content"
        android:layout_height="30dp"/>

核心逻辑是需要获取当前位置高度,以此来判断是否到达咱们之前设置的半展开高度(注意这里的半展开设置的也是占比值)。当滑动距离大于半展开高度就需要将搜索框向上平移且渐变。同时搜索框下面的homeView也需要做渐变操作。反之,在收回的时候当距离小于半展开状态需要恢复各视图状态。

ini 复制代码
override fun onSlide(bottomSheet: View, slideOffset: Float) {
//在peekHeight位置以上 滑动(向上、向下) slideOffsetbottomSheet.getHeight() 是展开后的高度的比例
  if (slideOffset > 0) { 
     val height = bottomSheet.height
     distance = height * slideOffset
     //搜索栏反向位移
     val halfExpandedRatio = bottomSheetBehavior!!.halfExpandedRatio
     val halfHeight = halfExpandedRatio * height //中间状态的高度
     if (distance > halfHeight) {
         search_view?.translationY = -(distance - halfHeight)
         search_view?.alpha = 1 - slideOffset + halfExpandedRatio
         homeView?.alpha = 1 - slideOffset
        } else {
         search_view?.translationY = 0f
         search_view?.alpha = 1.0f
         homeView?.alpha = 1.0f
        }
        fabContainer?.alpha = 1 - slideOffset
  }
}

到此,咱们gif展示的效果基本就实现了。只要你的想象力够丰富,在这里玩出花都可以。

以上便是实现高德地图首页效果的全部内容,希望对大家有所帮助。

相关推荐
JMchen1231 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs2 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob2 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔2 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9962 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly4 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首5 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-19437 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
有位神秘人7 小时前
kotlin与Java中的单例模式总结
java·单例模式·kotlin
Jinkxs7 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin