将图像放在ImageView上的正确方法是什么?

时间:2013-07-11 15:11:43

标签: android android-layout imageview

我是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>

布局构建器的结果看起来与我希望的完全相同:

emulator_result

在真正的手机上它是不同的:

phone_result

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

2 个答案:

答案 0 :(得分:0)

你的答案中有答案。

在您的案例中发生的事情图片大小对于不同的屏幕分辨率很重要。

硬编码的东西总会给你的情况带来奇怪的结果 android:layout_width="83dp" android:layout_height="83dp"这段代码。

选中此link,这将指导您管理不同屏幕的 drawables

这是另一个link

答案 1 :(得分: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>