有效地在运行时更改视图大小

时间:2017-04-16 12:23:50

标签: android surfaceview android-custom-view

我有一个surfaceview来做一些绘画的东西。我的视图支持放大/缩小功能。现在,当用户通过手指手势放大/缩小时,我想调整surfaceview的大小,我已经尝试通过更改surfaceview的布局参数来调整大小。虽然这有效,但速度很慢,而且在进行调整大小工作时,我看到一些大的跳跃(滞后),这是不可用的。在这里,我想知道如何有效地调整surfaceview的大小(没有跳转)?

这里扼杀了我的视图结构,

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<FrameLayout
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:layout_above="@+id/bottomMenu"
    android:layout_height="match_parent">

    <MySurfaceView
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</FrameLayout> ...

params改变代码,

ViewGroup.LayoutParams params = surface.getLayoutParams();
params.height = (int) (750*factor);
surface.setLayoutParams(params);

1 个答案:

答案 0 :(得分:0)

最后我找到了一个surfaceHolder方法来设置画布大小固定,

    holder.setFixedSize(canvasW, canvasH);

通过这种方法,我可以使用布局参数调整布局大小,而不会出现任何滞后现象。在这里,我需要在设置之前知道画布大小,因此我使用预定义大小的Java代码添加了SurfaceView,并且它运行顺畅。

**我还不确定,为什么设置画布固定大小完成了诀窍。欢迎您解释一下(可能会编辑此答案)。