Scrollview没有调整大小

时间:2013-11-22 08:41:59

标签: android android-layout resize scrollview pinchzoom

我正在使用捏合缩放来只是缩放我的自定义视图。它工作正常,但外部滚动视图没有调整其内容,并且视图周围有空白区域。

我的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<AbsoluteLayout
    android:id="@+id/wrapper"
    android:layout_width="wrap_content"
    android:layout_height="0px"
    android:layout_weight="1">
    <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        android:id="@+id/scrollview">
        <Auda.WaveFormView
            android:id="@+id/waveform"
            android:layout_height="fill_parent"
            android:layout_width="2000dp"
            android:layout_weight="1" />
    </HorizontalScrollView>
</AbsoluteLayout>
<LinearLayout
    style="@style/ToolbarBackground"
    android:layout_width="fill_parent"
    android:layout_height="62dip"
    android:gravity="center">
    <ImageButton
        android:id="@+id/play"
        android:layout_width="71dip"
        android:layout_height="52dip"
        android:layout_marginTop="6dip"
        android:layout_marginBottom="6dip"
        style="@android:style/MediaButton"
        android:src="@android:drawable/ic_media_play" />
</LinearLayout>

我的缩放代码

ScaleAnimation scaleAnimation = new ScaleAnimation(1f / prevScale, 1f / mScale, 1, 1, 0, 0);

scaleAnimation.Duration = 0;
scaleAnimation.FillAfter = true;
this.view.StartAnimation (scaleAnimation);

Screenshot

2 个答案:

答案 0 :(得分:0)

虽然您的视图现在(例如)在屏幕的一半上绘制,但它仍然占据整个屏幕。您可以通过向视图添加ClickListener并尝试按下标记的空白区域来验证这一点。

要解决此问题,您可以在ScaleAnimation中添加AnimationListener。在onAnimationEnd中,只需更新Auda.WaveFormView的LayoutParams即可。例如:

ScaleAnimation scaleAnimation = new ScaleAnimation(1f / prevScale, 1f / mScale, 1, 1, 0, 0);
scaleAnimation.Duration = 0;
scaleAnimation.FillAfter = true;
this.view.StartAnimation (scaleAnimation);
//after your are done with your animation
//set the animation listener
scaleAnimation.setAnimationListener(new AnimationListener() {
    @Override
    public void onAnimationEnd(Animation animation) {
        //this might not be the right logic 
        //especially that you are using scales relative to prevScale
        this.view.getLayoutParams().width = v.getWidth() / mScale;
    }
    @Override
    public void onAnimationStart(Animation animation) {}
    @Override
    public void onAnimationRepeat(Animation animation) {}
});

答案 1 :(得分:0)

尝试将布局宽度更改为fill_parent而不是换行内容