如何检查 MotionScene 是否处于转换 "start" 或 "end"?
How to check if MotionScene is at transition "start" or "end"?
我有一个带有 MotionScene 的 MotionLayout,我想做一个“if-check”(在 Kotlin 中)来检查场景当前是否处于过渡“开始”或“结束”。
有人知道怎么做吗?
这是我在 MotionScene 中的过渡“开始”和“结束”:
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="1000">
找到了一个非常方便的MotionLayout方法可以使用,解决了我的问题
可以像这样简单地使用 MotionLayout 的 built-in 方法“进度”:
if (my_motionlayout.progress == 0.0f) {
// The transition is at "start"
}
您可以根据需要使用 TransitionListener 回调
motionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
Log.i(TAG, "onTransitionStarted: ");
}
@Override
public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
if (isViewVisible) {
hideViews();
}
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int i) {
if (i != R.layout.start) {
showViews();
}
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
}
});
你也可以使用motionLayout.getProgress()
在 onTransitionChange
内,每当抽屉的位置发生变化时调用。
像这样
public void onTransitionChange(MotionLayout motionLayout, int i, boolean b, float v) {
if (motionLayout.getProgress() == 0.0) {
// this is start
} else {
// this is end
}
}
而不是使用
motionLayout.progress == 0.0f
你可以使用
motionLayout.currentState == R.id.XXXX
并将 XXXX 更改为您想要的状态,第一个状态使用如下所述的开始
motionLayout.setTransitionListener(object : MotionLayout.TransitionListener {
override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
if (motionLayout != null) {
if (motionLayout.currentState == R.id.start) {
// PUT YOUR CODE HERE
}
}
}
override fun onTransitionTrigger(motionLayout: MotionLayout?, triggerId: Int, positive: Boolean, progress: Float) {}
override fun onTransitionStarted(motionLayout: MotionLayout?, startId: Int, endId: Int) {}
override fun onTransitionChange(motionLayout: MotionLayout?, startId: Int, endId: Int, progress: Float) {}
})
我有一个带有 MotionScene 的 MotionLayout,我想做一个“if-check”(在 Kotlin 中)来检查场景当前是否处于过渡“开始”或“结束”。
有人知道怎么做吗?
这是我在 MotionScene 中的过渡“开始”和“结束”:
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="1000">
找到了一个非常方便的MotionLayout方法可以使用,解决了我的问题
可以像这样简单地使用 MotionLayout 的 built-in 方法“进度”:
if (my_motionlayout.progress == 0.0f) {
// The transition is at "start"
}
您可以根据需要使用 TransitionListener 回调
motionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
Log.i(TAG, "onTransitionStarted: ");
}
@Override
public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
if (isViewVisible) {
hideViews();
}
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int i) {
if (i != R.layout.start) {
showViews();
}
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
}
});
你也可以使用motionLayout.getProgress()
在 onTransitionChange
内,每当抽屉的位置发生变化时调用。
像这样
public void onTransitionChange(MotionLayout motionLayout, int i, boolean b, float v) {
if (motionLayout.getProgress() == 0.0) {
// this is start
} else {
// this is end
}
}
而不是使用
motionLayout.progress == 0.0f
你可以使用
motionLayout.currentState == R.id.XXXX
并将 XXXX 更改为您想要的状态,第一个状态使用如下所述的开始
motionLayout.setTransitionListener(object : MotionLayout.TransitionListener {
override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
if (motionLayout != null) {
if (motionLayout.currentState == R.id.start) {
// PUT YOUR CODE HERE
}
}
}
override fun onTransitionTrigger(motionLayout: MotionLayout?, triggerId: Int, positive: Boolean, progress: Float) {}
override fun onTransitionStarted(motionLayout: MotionLayout?, startId: Int, endId: Int) {}
override fun onTransitionChange(motionLayout: MotionLayout?, startId: Int, endId: Int, progress: Float) {}
})