web-dev-qa-db-ja.com

画像を利用可能な最大幅にスケーリングし、アスペクト比を維持し、ImageViewの余分なスペースを回避します

この単純なレイアウトXMLと、30X30ピクセルのgreen_square.pngファイルがあります。

<?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" >

    <ImageView
        Android:background="@color/red"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:adjustViewBounds="true"
        Android:scaleType="fitStart"
        Android:src="@drawable/green_square"/>

</LinearLayout>

私が達成しようとしているのは、ImageViewの余分なスペースがない状態でアスペクト比を維持しながら、親の幅を満たすように画像を拡大縮小することです。

避けたい余分なスペースを参照するために、ImageViewに赤い背景を追加しました。

これが私の目標です

18
Shlomi Schwartz
<ImageView
        Android:id="@+id/game"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:scaleType="centerCrop"
        Android:adjustViewBounds="true"
        Android:src="@drawable/ic_game" 
        />

これは私のために働きます。アスペクト比を維持するための親と中央のトリミングの全幅

38
Blucreation

ここには実際に機能する素晴らしい答えがたくさんあります。私は今これを行う方法を、より現代的なXML構文である制約ビューと共有するだけです。制約ビュールークを信じてください!

<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#394BAB"
    tools:context="com.appdomain.app.apppro.ActivityName">

    <ImageView
        Android:id="@+id/Nice_img"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="0dp"
        Android:src="@drawable/green_square"
        Android:scaleType="centerCrop"
        Android:adjustViewBounds="true"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</Android.support.constraint.ConstraintLayout>

もちろん、tools:context = "com.collectsavings.collect.collectpro.LoginAndRegisterPrompt"とAndroid:src = "@ drawable/green_square"はすべてアプリアクティビティコンテキストとdrawablリソースにそれぞれ一致する必要があります。

0
Marcel

とても簡単です。幅をfill_parent、高さをwrap_contentにするだけです。これが私が理解したものです。

<ImageView
    Android:id="@+id/game"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:scaleType="centerCrop"
    Android:adjustViewBounds="true"
    Android:src="@drawable/ic_game" 
    />
0
arc_shiva

私の見解では、このImageViewの余分なレイアウトはバグです。私も同じことが起こりました。その結果、私がgreen_squareに従いたいテキストは、余分なレイアウトに従いました。だから私がしたことは、画面の下部に関連するテキストを指定することでした。そうすれば、テキストは余分なレイアウトを超えてしまいます。確かに、これは最善の解決策ではありませんでしたが、green_squareとテキストの間に大きなスペースを設けるよりもはるかに見栄えがします。

0
subduedjoy