- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的一种布局使用 BottomSheet View 。对于一个非常具体的情况,我需要 BottomSheet 的动画持续时间,它通过 setState(...) 方法在布局中滑动。它应该在 400 毫秒左右,但我不希望在这种情况下使用“神奇”数字。
最佳答案
BottomSheetBehavior 的持续时间由 setState 触发的动画或触摸事件取决于各种条件。
BottomSheetBehavior
内部使用 ViewDragHelper这决定了 computeAxisDuration() 内的动画持续时间私有(private)方法。这个持续时间取决于一些任意值,不能通过官方 API 更改:
public class ViewDragHelper {
...
private static final int BASE_SETTLE_DURATION = 256; // ms
private static final int MAX_SETTLE_DURATION = 6000; // ms
...
}
更改显示/隐藏动画时间的 hack 解决方案是...
BottomSheetBehavior
和 ViewDragHelper
类源代码复制到您的项目中(使用不同的包名称)import ViewDragHelper
以使用您的 ViewDragHelper
而不是原始的 Android API 类。computeAxisDuration
返回的持续时间以满足您的要求,例如正好返回 400 毫秒。BottomSheetBehavior
类代替原来的类。这是一个非常糟糕的解决方案,但它在我的项目中有效。详情如下。
文件ViewDragHelper.java
public class ViewDragHelper {
// Additional fields and methods defined.
private int mSettleDuration = BASE_SETTLE_DURATION;
public void setDurationSpeedFactor(final float factor) {
mSettleDuration = (int)(factor * BASE_SETTLE_DURATION);
}
private boolean mSkipAnimation = false;
public void setSkipAnimation(final boolean skipAnimation) {
this.mSkipAnimation = skipAnimation;
}
// Modified version of private function.
private int computeAxisDuration(int delta, int velocity, int motionRange) {
if (delta == 0) {
return 0;
}
final int width = mParentView.getWidth();
final int halfWidth = width / 2;
final float distanceRatio = Math.min(1f, (float) Math.abs(delta) / width);
final float distance = halfWidth + halfWidth
* distanceInfluenceForSnapDuration(distanceRatio);
int duration;
velocity = Math.abs(velocity);
if (velocity > 0) {
duration = 4 * Math.round(1000 * Math.abs(distance / velocity));
} else {
final float range = (float) Math.abs(delta) / motionRange;
duration = (int) ((range + 1) * mSettleDuration);
}
return Math.min(duration, MAX_SETTLE_DURATION);
}
// Rest of original class body here...
}
文件 BottomSheetBehavior.java
// Comment out original ViewDragHelper and use above modified version.
//import androidx.customview.widget.ViewDragHelper;
import your.custom.ViewDragHelper;
public class BottomSheetBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
/**
* Allows to set up ViewDragHelper immediately or when it is created.
*/
public interface IDragHelperConfig {
void onDragHelperCreated(ViewDragHelper viewDragHelper);
}
private IDragHelperConfig iDragHelperConfig;
public void setIDragHelperConfig(IDragHelperConfig iDragHelperConfig) {
this.iDragHelperConfig = iDragHelperConfig;
if (viewDragHelper != null) {
iDragHelperConfig.onDragHelperCreated(viewDragHelper);
}
}
//...
public boolean onLayoutChild(...) {
if (viewDragHelper == null) {
viewDragHelper = ViewDragHelper.create(parent, dragCallback);
if (iDragHelperConfig != null) {
iDragHelperConfig.onDragHelperCreated(viewDragHelper);
}
}
}
//...
}
任何android View 初始化中的示例代码
val params: CoordinatorLayout.LayoutParams = myLayout.layoutParams as CoordinatorLayout.LayoutParams
val behavior = BottomSheetBehavior<FrameLayout>(myLayout.context, null)
// Optionally, set the height of the bottom sheet when it is collapsed (usefull for experiments).
// behavior.peekHeight = 20
// Configure bottom sheet behavior.
behavior.setIDragHelperConfig {
// Set how many times to slow the speed of the animation
// (relative to original Android animation speed).
it.setDurationSpeedFactor(20f)
// Optionally, turn off animation
// Useful when entering a new activity and
// initial animation is not desired.
it.setSkipAnimation(false)
}
params.behavior = behavior
关于android - BottomSheet 动画持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51720891/
我有基于角度 Material 文档的以下代码: 在我的 HTML Abrir BottomSheet 并且,在我的页面 ts 存档中: import { Component, OnInit } f
我想要一些关于如何修改这段代码的帮助,这样我就可以用触摸手势上下滑动这个反应本机底片。我想出了怎么用纽扣来做。在我的Package.json中,我使用了@Gorhom/Bottom-Sheet,“re
我正在为我的一种布局使用 BottomSheet View 。对于一个非常具体的情况,我需要 BottomSheet 的动画持续时间,它通过 setState(...) 方法在布局中滑动。它应该在 4
FAB BottomSheet按下后出现在屏幕上,但是位置不对(见图1),我想做成图2的样子,怎么解决? 我的 Activity : public class FirstscreenActivity
我有一个包含产品详细信息卡片的 BottomSheet。问题是,当我在 Bottom Sheet 处于 展开 状态时单击产品详细信息上的 + 或 - 按钮时,它跳下来。 当它处于关闭状态并且我单击按钮
我正在尝试在我的应用程序中实现 BottomSheet。我正在学习安卓。我已经按照图书馆页面 here 中给出的说明实现了它.我使用了如下的 Java 代码。 findViewById(R.id.bu
我是 Android 的新手 BottomSheet并且我已经成功地尝试了有关如何使用它的示例,但大多数示例仅演示了通过查看点击事件显示/隐藏 BottomSheet。 现在我有以下代码: Botto
我正在使用 bottomsheetlayout 弹出窗口进行社交媒体共享。现在的问题是,它不止一次开放。请帮我解决这个问题。 在我的按钮上单击我调用 asynctask 以下载图像。 @Overrid
我试图不让 BottomSheet 填充整个屏幕,而是在展开时在上方留出一些空间。这是我的 onExpand 填充整个屏幕的代码。 bottomSheetBehavior = BottomSheetB
我有一个 FrameLayout (teaserContainer) 和 BottomSheet (invitesContainer)。 FrameLayout 位于 BottomSheet 之外(和
我一直在尝试设置 Bottomsheet Google 在他们的应用程序(例如 GOOGLE NEWS 等)中使用的方式, This is how Google's Bottomsheet looks
我正在尝试在 Android 中实现类似于下图的摘要 Bottom Sheet 库。有没有什么方法可以将多个 Bottom Sheet 附加到一个 View ,您可以向左/向右滑动以切换并让相邻的 V
目前我正在使用来自 this lib 的底页,我想实现这样的图片动画google map在滑动 bottomsheet 时,我想按照显示的图像一起滑动 imageview,我已经用过这个link fo
我有一个 Bottom Sheet ,里面有一个 NestedScrollView(见下文)。当我按下 FAB 按钮时,我想让这个 NestedScrollView 中的某些部分不可见。但是,当我将一
我正在尝试在布局中使用 BottomSheet。 Root View 是一个 CoordinatorLayout,我想在 Bottom Sheet 的顶部设置 Elevation,所以我将它设置为高值
编辑: package com.walkindeep.teammanagerpreview; import android.content.Context; import android.os.Bun
我遇到 BottomSheetBehaviour 的问题。BottomSheet 在开始时没有扩展到最大高度。但是,它可以滚动到最大高度。但我不想滚动,而是希望 BottomSheet 扩展到其最大高
所以我在 CoordinatorLayout 中使用嵌套子滚动的新支持库行为,我有这样的 View : 我的应用程序有一个要求,这不是新要求,我需要暂时禁用协调器布局的某些元素的滚动。对于这个 b
我已经使用 NestedScrollView 实现了 Bottom Sheet 行为。并且想知道是否可以在外部触摸时隐藏底部 View 。 最佳答案 我终于可以做到了, 使用了以下代码行: @Over
我知道可以像这样设置普通的底板 rememberModalBottomSheetState( initialValue = ModalBottomSheetValue.Hidden, conf
我是一名优秀的程序员,十分优秀!