0

我是 android 开发的新手,仍然无法完全理解大小调整如何与不同的布局一起工作。我想将本书的预览放入此模板中:

book_template

我尝试使用 FrameLayout 来实现它。这个想法是预览图像的中心将恰好在 png 背景的中心所在的位置。这是代码:

<FrameLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_weight=".5" >

  <ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/book_frame" />
  <ImageView
    android:id="@+id/previewImage"
    android:layout_width="83dp"
    android:layout_height="83dp"
    android:layout_gravity="center_vertical|center_horizontal"
    android:src="@drawable/abs__ab_bottom_solid_dark_holo" />
</FrameLayout>

布局生成器中的结果看起来与我想要的完全一样:

模拟器结果

在真机上是不同的:

电话结果

我认为在其他分辨率上它也将与这两种变体不同。所以我的问题是如何同步这些图像,以便在任何调整大小和扭曲后预览将正确地适合封面?可能的解决方案是从图像中删除边框并将其放在 previewImage 上。但是在应用程序中有几个类似的用例无法删除边框,所以我想为所有这些用例找到一个通用的解决方案。

4

2 回答 2

0

你的问题有你的答案。

在您的情况下发生的图像大小对不同的屏幕分辨率很重要。

在您的情况下,硬编码的东西总是会给出奇怪的结果 android:layout_width="83dp" android:layout_height="83dp"

检查此链接,这将指导您管理不同屏幕的可绘制对象。

这是另一个链接

于 2013-07-11T15:23:13.423 回答
0

所以对我来说合适的解决方案是将内部图像的边框分离到它自己的 ImageView 中,将其插入到照片上的布局中,并为照片添加 1dp 填充。布局变成这样:

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight=".5" >

            <ImageView
                android:id="@+id/bookFrame"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|center_horizontal"
                android:src="@drawable/book_frame" />

            <ImageView
                android:id="@+id/previewImage"
                android:layout_width="83dp"
                android:layout_height="83dp"
                android:layout_gravity="center_vertical|center_horizontal"
                android:padding="1dp"
                android:scaleType="centerCrop"
                android:src="@drawable/abs__ab_bottom_solid_dark_holo" />

            <ImageView
                android:id="@+id/previewBorder"
                android:layout_width="83dp"
                android:layout_height="83dp"
                android:layout_gravity="center_vertical|center_horizontal"
                android:src="@drawable/preview_border" />
        </FrameLayout>
于 2013-07-15T21:37:01.883 回答