不能在Motionlayout | Android Studio中执行两个不同元素的动作

我有一个移动布局,在覆盖它下面的元素和显示它之间来回移动,当它向上滑动时,这个元素(仪表盘)有一个向上滑动的图像,让用户知道它是可滑动的。这里的问题是,我希望“向上滑动箭头”在被滑动后消失。

但我面临几个问题:运动布局不识别元素,除了下面的一个,所以似乎一个运动布局不能为多个元素做过渡。

所以我不能使用仪表盘的运动布局来隐藏滑动后的图像,我尝试了滑动,我它没有工作,从来没有给我一个错误

我也不能将向上滑动的图像转换为运动布局,因为它无法识别仪表板

所以我想用编程的方式来做。当仪表盘(黑色的那个)元素向上滑动时,向上滑动的图像被设置为不可见,但是已经开始设置了,仪表盘元素现在忽略了运动布局中的向上滑动侦听器,并承认kotlin侦听器。

我只能想到一些解决方案作为一个新的android开发。其中一个是刷了侦听器添加到仪表板以编程方式和过渡使用向上箭头消失或找到一个办法向上运动布局过渡仪表板和删除刷卡形象一旦被刷卡

这两种方法我都不知道怎么做,我也愿意接受更有效的替代方法

它在被刷之前是什么样子的

它应该如何照顾

主要活动:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".MainActivity">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="500dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
        <androidx.cardview.widget.CardView
            android:id="@+id/dashboard"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:cardBackgroundColor="@color/green"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
        </androidx.cardview.widget.CardView>
    </androidx.constraintlayout.widget.ConstraintLayout>
    <androidx.constraintlayout.motion.widget.MotionLayout
        android:id="@+id/constraintLayout12"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:elevation="20dp"
        app:layoutDescription="@xml/activity_main_light_copy_2_xml_constraintlayout12_scene"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
        <ImageView
            android:id="@+id/swipeUpPic"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            app:layout_constraintBottom_toBottomOf="@id/dashboard"
            app:layout_constraintEnd_toEndOf="@id/dashboard"
            app:layout_constraintStart_toStartOf="@id/dashboard"
            app:srcCompat="@drawable/scroll_image" />
    </androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

运动布局:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">
    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">
        <OnSwipe
            motion:touchAnchorId="@id/dashboard"
            motion:dragDirection="dragUp"
            motion:touchAnchorSide="top" />
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@id/dashboard"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent" >
        </Constraint>
        <Constraint
            android:id="@id/swipeUpPic"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="visible"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent" >
        </Constraint>
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@id/dashboard"
            android:layout_width="match_parent"
            android:layout_height="400dp"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent" >
        </Constraint>
        <Constraint
            android:id="@id/swipeUpPic"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent"
            android:visibility="invisible">
        </Constraint>
    </ConstraintSet>
</MotionScene>

###让我先说我完全同意@hoford的观点。

最好的方法是平展你的MotionLayout,但是你可以显示/隐藏你的滑动向上按钮添加一个TransitionListener到你的MotionLayout。使用addTransitionListener ()

你可以使用:

onTransitionStarted ()

当一个抽屉即将开始转换时调用。请注意。如果从“未定义状态”开始,startId可能是-1。的startId and endId refers to the ConstraintSet ids.和endId refe指的是ConstraintSet ids.id。

onTransitionChange ()

当抽屉的位置改变时调用。您甚至可以跟踪当前的(转换)进程,并将相同的转换状态应用到您自己的进程中View(s).(年代)。

###有一些方法来实现这一点。

平面设计(不要嵌套视图)

嵌套MotionLayout

创建一个自定义ViewGroup(和你尝试做的一样)

最简单的方法就是简单地把它设计成平面。弄清楚如何制作一个虚拟面板有点棘手。在MotionLayout中视图的顺序是z顺序(Bottom first)。随便摆弄一下,你就能算出来。

出于团队/架构的原因,您可能不希望这样做。有一个面板被隔在几个屏幕上。

2和3只是彼此的变体。

这个想法是ViewGroup子类监听setProgress(浮点x),控制motionLayout在正确的位置调用setProgress。

MotionLayout已经监听setProgress所以有些已经为你完成了。

关键是外部的MotionLayout面板在滑动控制中。

我还会推荐看几个例子:

https://developer。android。com/training/constraint-layout/motionlayout/examples

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码