使用RelativeLayout和SurfaceView

时间:2015-07-02 04:08:28

标签: android surfaceview translate-animation

直接提问,我目前在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);

mPlayerFrameRelativeLayout.

的变量

但是,我还必须支持API级别10.客户端坚持这样做。在浏览了这里和其他地方后,我想出了这段代码。

TranslateAnimation anim = new TranslateAnimation(0,0,distance,distance);
anim.setFillAfter(true);
anim.setDuration(0);
mPlayerFrame.startAnimation(anim);

使用上面的代码,我可以看到mPlayerFrame正在移动,但播放(mPlayerViewSurfaceView)显然根本没有移动。

到目前为止,我已尝试过以下方法:

  • 将动画设置为mPlayerView

    mPlayerView.startAnimation(anim);
    
  • 设置offsetTopAndBottom

    mPlayerView.offsetTopAndBottom(distance);
    

    它确实使用了它,但速度比mPlayerFrame正在移动的速度快得多。

总而言之,我在SurfaceView中有一个RelativeLayout,我希望将此RelativeLayout与其SurfaceView孩子一起移动。使用API​​级别11+可轻松实现,但我也必须支持API级别10。

谢谢,

1 个答案:

答案 0 :(得分:2)

如果您对旧的动画框架有困难,可以使用优秀的库来增加API11 ObjectAnimator与旧Android平台的兼容性:

  

nineoldandroids

这个库与新库之间存在一些差异,尤其是新实际将对象移动到新位置并且库只显示它的图像,因此我建议您根据API级别拆分代码