我的相对布局包含一些文本视图和一个(圆形)图像视图,图像视图位于中间。
有一个从相对布局的中心发出的扩展环的动画,当图像视图也居中时,也会从图像视图的中心发出。
然而,现在需要垂直向上移动图像视图,使其不再位于布局的中心,因此动画的原点也需要垂直移动相同的程度。
这是动画实现方式的草图,它只显示了一小部分代码,以显示其实现的主要特征。
rippleParams.addRule(CENTER_IN_PARENT, TRUE)
这就是它目前实现的方式,我想知道我是否可以用其他规则替换VS_NEEDSNEWMETADATA
,但我看不到任何适用的其他规则。
我想知道是否可以使用规则来对齐动画视图,使其不再以父RelativeLayout为中心,而是在RelativeLayout内的imageView上?
或者是否可以指定坐标,或者我可以将动画的原点移动到与imageView中心相匹配的其他方式?
答案 0 :(得分:1)
和你一样,我看不出你怎么能用一个简单的规则来做到这一点,但是你能做的就是将你的RippleView
包裹在FrameLayout
上并加上一些paddingBottom
与您ImageView
从中心向上移动的金额相匹配。
例如,如果您的ImageView
现在100dp
位于RelativeLayout
的中心位置,那么您还需要将paddingBottom
设置为100dp
新FrameLayout
包裹你的RippleView
为了让我更清楚我的意思,这里是实现它的XML布局(我只使用XML,因为我认为它更清楚发生了什么,我是相信你能够轻松地将它翻译成代码中的编程方式):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f0"
android:layout_centerInParent="true"
android:paddingBottom="100dp"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:background="#f00"/>
</FrameLayout>
</RelativeLayout>
我已经为FrameLayout
和ImageView
添加了背景颜色(在您的情况下将是RippleView
),因此您可以清楚地看到它们的界限 - 请注意{{ 1}}完全包含在ImageView
:
另一种选择是将FrameLayout
和ImageView
置于RippleView
的宽度和高度设置为FrameLayout
,然后定位wrap_content
你应该放置FrameLayout
并设置ImageView
RippleView layout_gravity="center" on your
RippleView , so that the
ImageView ends up centred on the
FrameLayout by virtue of the fact the bounds of the
ImageView` - 例如:
match the bounds of the