android motionLayout 自定义属性 - 如何从可绘制资源指定背景颜色
android motionLayout's CustomAttribute - how to specifiy a background color from drawable resources
在 androids motionLayout 中,我需要在视图转换时更改颜色。但它似乎不带资源链接,如“@drawable/myshape”。它需要像“#FFFFFF”这样的原始值。这是我到目前为止所做的:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
android:id="@+id/transition"
app:constraintSetEnd="@id/end"
app:constraintSetStart="@id/start"
app:motionInterpolator="linear"
app:moveWhenScrollAtTop="true">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/spaceShip"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<!-- <CustomAttribute-->
<!-- app:attributeName="backgroundColor"-->
<!-- app:customColorValue="@drawable/space_spaceShip_bg" />-->
//以上代码无效。它需要一个原始值,如何从可绘制对象中指定它,因为我已经为我的背景创建了自定义背景形状。
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/spaceShip"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="backgroundColor"
app:customColorValue="#FFFFFF" /> //also here how to specify @color/white instead of raw value
</Constraint>
</ConstraintSet>
</MotionScene>
看起来这样做的方法是找到某个视图的 属性,其具有从 0 到 1 的 setter。 [imageFilterView][1] class 就是这样一个。
它有一个名为 [setcrossfade][2]
的 属性
所以我的动作布局可以是这样的:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
android:id="@+id/transition"
app:constraintSetEnd="@id/end"
app:constraintSetStart="@id/start">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="crossfade"
app:customFloatValue="0" />
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="crossfade"
app:customFloatValue="1" />
</Constraint>
</ConstraintSet>
</MotionScene>
在我们的布局文件中,我们可以这样做:
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/ml"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
app:layoutDescription="@xml/motion_scene">
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/bg1"
app:altSrc="@drawable/bg2"
android:background="@drawable/bg1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.motion.widget.MotionLayout>
按你想要的方式转换它..手动或在运动布局文件中使用滑动。无论如何,它会淡出一个可绘制对象并淡入另一个可绘制对象。正是我想要的。
[1]: https://developer.android.com/reference/androidx/constraintlayout/utils/widget/ImageFilterView
[2]: https://developer.android.com/reference/androidx/constraintlayout/utils/widget/ImageFilterView#setCrossfade(float)
在 androids motionLayout 中,我需要在视图转换时更改颜色。但它似乎不带资源链接,如“@drawable/myshape”。它需要像“#FFFFFF”这样的原始值。这是我到目前为止所做的:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
android:id="@+id/transition"
app:constraintSetEnd="@id/end"
app:constraintSetStart="@id/start"
app:motionInterpolator="linear"
app:moveWhenScrollAtTop="true">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/spaceShip"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<!-- <CustomAttribute-->
<!-- app:attributeName="backgroundColor"-->
<!-- app:customColorValue="@drawable/space_spaceShip_bg" />-->
//以上代码无效。它需要一个原始值,如何从可绘制对象中指定它,因为我已经为我的背景创建了自定义背景形状。
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/spaceShip"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="backgroundColor"
app:customColorValue="#FFFFFF" /> //also here how to specify @color/white instead of raw value
</Constraint>
</ConstraintSet>
</MotionScene>
看起来这样做的方法是找到某个视图的 属性,其具有从 0 到 1 的 setter。 [imageFilterView][1] class 就是这样一个。 它有一个名为 [setcrossfade][2]
的 属性所以我的动作布局可以是这样的:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
android:id="@+id/transition"
app:constraintSetEnd="@id/end"
app:constraintSetStart="@id/start">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="crossfade"
app:customFloatValue="0" />
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<CustomAttribute
app:attributeName="crossfade"
app:customFloatValue="1" />
</Constraint>
</ConstraintSet>
</MotionScene>
在我们的布局文件中,我们可以这样做:
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/ml"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
app:layoutDescription="@xml/motion_scene">
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/myview"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/bg1"
app:altSrc="@drawable/bg2"
android:background="@drawable/bg1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.motion.widget.MotionLayout>
按你想要的方式转换它..手动或在运动布局文件中使用滑动。无论如何,它会淡出一个可绘制对象并淡入另一个可绘制对象。正是我想要的。 [1]: https://developer.android.com/reference/androidx/constraintlayout/utils/widget/ImageFilterView [2]: https://developer.android.com/reference/androidx/constraintlayout/utils/widget/ImageFilterView#setCrossfade(float)