web-dev-qa-db-ja.com

背景画像の配置

ルートLinearLayout要素(両方の次元でfill_parentに設定されています)を設定して、デバイスの向きに関係なく、常に画面の左下隅に配置される背景画像を設定しようとしています。 「background-position:left bottom;」を使用してcssで実行できるような背景画像の位置を設定する方法があれば、すばらしいでしょう。しかし、私はこれをAndroidで達成する方法を見ていません。これを行う方法はありますか?

助けてくれてありがとう。

36
Ryan

XMLファイル内のビットマップを使用してカスタムビットマップドローアブルを作成する必要があります(例: "res/drawables/my_drawable.xml")

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/my_png_file"
    Android:gravity="bottom|left" />

そして、このドローアブルxmlをビューの背景として設定します( "@ drawables/my_drawable")。描画可能なXML形式は、Androidサイトでは十分に文書化されていません。そのため、自分で解決する方法を理解するのは簡単な問題ではありません。

81
Yoni Samlan

プログラムでこれを行う利点が見つかった場合、画像はレイアウトよりも大きくなるのではなく、レイアウトに適合します。なぜイデアはありません。

コード:

Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.image);
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
bitmapDrawable.setGravity(Gravity.BOTTOM|Gravity.RIGHT);
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root);
layout.setBackgroundDrawable(bitmapDrawable);
9
neteinstein

LinearLayoutをRelativeLayoutにラップし、それにImageViewを追加します。 Android:layout_alignParentBottomとAndroid:layout_alignParentLeftを使用すると、画像を左下に配置できます。

<RelativeLayout
    Android:id="@+id/relativeLayout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ImageView
        Android:id="@+id/imageView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="true"
        Android:src="@drawable/my_image" />

    <LinearLayout
        Android:id="@+id/linearLayout"
        ... >

ImageViewが、画像をバックグラウンドで描画するRelativeLayoutの最初の要素であることを確認してください。

1
sulai

私の答えは上記の答えの単なる更新ですバックグラウンドにXMLを使用している場合、アスペクト比で問題が発生する可能性があります

このコードを使う

Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.image);
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
  bitmapDrawable.setGravity(Gravity.BOTTOM| Gravity.RIGHT| Gravity.FILL_HORIZONTAL);
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root);
layout.setBackgroundDrawable(bitmapDrawable);

Gravity.Fill_HORIZONTALは、背景を適用しているレイアウトの幅に適合します。これをXMLファイルで言及することもできますが、前述のとおり、画像比率の問題が発生します

0
Chirag Joshi