直接提问,我目前在SurfaceView
内有RelativeLayout
,如下所示:
<RelativeLayout
android:id="@+id/surfaceframe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF000000"
android:visibility="visible" >
<SurfaceView
android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="visible" />
</RelativeLayout>
我要求RelativeLayout
及其SurfaceView
移动。容易。
mPlayerFrame.setTranslation(distance);
此mPlayerFrame
是RelativeLayout.
但是,我还必须支持API级别10.客户端坚持这样做。在浏览了这里和其他地方后,我想出了这段代码。
TranslateAnimation anim = new TranslateAnimation(0,0,distance,distance);
anim.setFillAfter(true);
anim.setDuration(0);
mPlayerFrame.startAnimation(anim);
使用上面的代码,我可以看到mPlayerFrame
正在移动,但播放(mPlayerView
,SurfaceView
)显然根本没有移动。
到目前为止,我已尝试过以下方法:
将动画设置为mPlayerView
mPlayerView.startAnimation(anim);
设置offsetTopAndBottom
mPlayerView.offsetTopAndBottom(distance);
它确实使用了它,但速度比mPlayerFrame
正在移动的速度快得多。
总而言之,我在SurfaceView
中有一个RelativeLayout
,我希望将此RelativeLayout
与其SurfaceView
孩子一起移动。使用API级别11+可轻松实现,但我也必须支持API级别10。
谢谢,
答案 0 :(得分:2)
如果您对旧的动画框架有困难,可以使用优秀的库来增加API11 ObjectAnimator与旧Android平台的兼容性:
这个库与新库之间存在一些差异,尤其是新实际将对象移动到新位置并且库只显示它的图像,因此我建议您根据API级别拆分代码