如何在linearlayout中缩放子视图并使其可滚动?

时间:2017-08-25 13:32:46

标签: android android-layout xamarin xamarin.android

我创建了自定义linearlayout并进行了缩放,我在垂直方向上使用ImageView添加图像。要在我使用ScrollView和Horizo​​ntalScrollView的图像之间滚动。我的问题是当我缩放自定义线性布局时,滚动视图大小未调整,自定义线性布局的顶部和底部被剪裁。我不知道我的逻辑出错了。我没能找到使用谷歌的解决方案。请在下面的链接中找到我的应用程序,并让我知道您的建议以解决此问题。 SampleApp

1 个答案:

答案 0 :(得分:0)

如果您想使用ScrollView并在图片上垂直放置图片,则需要为每个{{1}在HorizontalScrollView内创建ScrollViewLinearLayout }}

并且您的比例设置为ImageView,当缩放一个图像时,所有其他图像将在同一时间缩放。我认为你需要做的是缩放每个图像。然后你可以在每个LinearLayout上实现,例如创建一个 ScaleImageView

由于您要在ImageView中显示ImageView的列表,您可以编写如下代码:

LinearLayout

代码背后:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:fillViewport="true"
            android:id="@+id/sv">
  <HorizontalScrollView android:layout_height="match_parent"
                          android:layout_width="match_parent"
                          android:fillViewport="true"
                        android:id="@+id/hsv">
    <LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root" />
  </HorizontalScrollView>
</ScrollView>

为避免private List<int> imageList = new List<int> { Resource.Drawable.image1, Resource.Drawable.image2, Resource.Drawable.image3, Resource.Drawable.image4 }; private LinearLayout root; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); root = FindViewById<LinearLayout>(Resource.Id.root); root.SetClipChildren(false); for (int i = 0; i < imageList.Count; i++) { Bitmap bitmap = BitmapFactory.DecodeResource(this.Resources, imageList[i]); var lp = new LinearLayout.LayoutParams(bitmap.Width, bitmap.Height); lp.SetMargins(0, 2, 0, 2); lp.Gravity = Android.Views.GravityFlags.Center; ScaleImageView img = new ScaleImageView(this, null); img.SetImageBitmap(bitmap); img.SetScaleType(ScaleType.Matrix); root.AddView(img, i); } } ScrollView之间发生冲突,请修改Zoom OnTouchEvent,如下所示:

ScaleImageView