图像以横向模式拉伸

Posted

技术标签:

【中文标题】图像以横向模式拉伸【英文标题】:Images are stretched in a landscape mode 【发布时间】:2016-11-22 23:24:58 【问题描述】:

(附在问题底部的图片)

我有这个布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_
    android:layout_
    android:id="@+id/mainLayout">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_
        android:paddingTop="10dp"
        android:layout_
        android:id="@+id/viewsLayout"
        android:layout_weight="1.0">
    </LinearLayout>

</LinearLayout>

我想将球的 3x3 图像视图添加到内部线性布局“viewsLayout”中,因此我将在其适当的类中这样做:

    LinearLayout main = (LinearLayout) findViewById(R.id.viewsLayout);
    main.setWeightSum(3.0f);

    for (int i = 0; i < 3; ++i) 
        LinearLayout currentRow = new LinearLayout(this);
        currentRow.setOrientation(LinearLayout.HORIZONTAL);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
        params.weight = 1.0f;
        currentRow.setLayoutParams(params);

        for (int j = 0; j < 3; ++j) 
            ImageView viewOne = new ImageView(this);
            viewOne.setBackgroundResource(R.drawable.ball);
            params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
            viewOne.setLayoutParams(params);
            viewOne.setScaleType(ImageView.ScaleType.FIT_CENTER);
            viewOne.setAdjustViewBounds(true);
            currentRow.addView(viewOne);
        
        main.addView(currentRow);
    

问题是在横向模式下,球变成椭圆(太拉伸),正如您在附图中看到的那样。

我看到这个问题已经被问过了,不建议避免使用横向模式。 (我添加了一张图片,以便搜索者轻松找到。)我看到解决方案是为横向模式创建一个新布局,但我有很多布局,因此为横向模式为每个布局创建另一个布局可能很可怕。有更好的解决方案吗?如果不是,我是否必须通过 dp 而不是 MATCH_PARENT 设置 linearLayout\ImageView 的宽度?

如果解决方案简短易写,请告诉我。

【问题讨论】:

您正在设置 ImageView 的背景而不是资源,因此您的缩放/adjustViewbounds 不会影响它。请改用viewOne.setImageResource(R.drawable.ball); 实际上,这仍然不是您想要的。如果你想让 3x3 像这样适合中心,你将不得不为景观使用不同的通货膨胀代码,以保持它们的正确加权 哇设置了图片资源后看起来棒极了!但为什么你认为这不是我想要的?也许我的解释不好,或者它可能有我现在没想到的行为?现在看起来更完美了! :) 如何将您的评论设置为我问题的答案? 【参考方案1】:

您正在使用 R.drawable.ball。是png文件吗?也许你应该尝试 9 补丁文件,避免在编辑器中拉伸文件为 9 补丁文件格式。

如果适合你的情况,你可以通过drawable shapes画一个球

【讨论】:

是的,它是一个 png 文件。但是,尽管我使用的是 9 个补丁图像,但图像仍然被拉伸。也许是因为 match_parent 宽度.. 尝试在9个补丁图像文件中指定它应该如何被拉伸,正如这里所描述的link 这里描述了类似的问题 [link] ***.com/a/24505700/7092030【参考方案2】:

首先,您的图片尺寸可能不够宽,无法适应横向模式。为此,您需要一个单独的图像以适应横向模式。

其次,您可以尝试创建将在横向模式下触发的横向布局。创建一个 layout-land 文件夹并为其创建一个单独的 xml。

参考这些链接, https://developer.android.com/training/multiscreen/screensizes.html

https://developer.android.com/training/multiscreen/screendensities.html

【讨论】:

以上是关于图像以横向模式拉伸的主要内容,如果未能解决你的问题,请参考以下文章

android:在imageview中拉伸图像以适应屏幕

旋转到横向时拉伸 UIToolbar 背景图像

怎么让网页的背景图片随着页面的拉伸而拉伸

html如何背景图片拉伸

具有纵向和横向图像视图的自动布局

在横向模式下飞溅(启动图像)?