Ini bukan solusi yang paling performan, tetapi sebagai seseorang menyarankan daripada latar belakang Anda dapat membuat FrameLayout atau RelativeLayout dan menggunakan ImageView sebagai latar belakang semu - elemen lain akan berada tepat di atasnya:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<ImageView
android:id="@+id/ivBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scaleType="fitStart"
android:src="@drawable/menu_icon_exit" />
<Button
android:id="@+id/bSomeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="61dp"
android:layout_marginTop="122dp"
android:text="Button" />
</RelativeLayout>
Masalah dengan ImageView adalah bahwa hanya scaleTypes yang tersedia adalah: CENTER, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, FIT_END, FIT_START, FIT_XY, MATRIX ( http://etcodehome.blogspot.de/2011/05/android-imageview-scaletype-samples.html )
dan untuk "skala gambar latar (menjaga rasio aspeknya)" dalam beberapa kasus, ketika Anda ingin gambar untuk mengisi seluruh layar (misalnya gambar latar belakang) dan rasio aspek layar berbeda dari gambar, skala yang diperlukanTipe dari TOP_CROP, karena:
CENTER_CROP menempatkan gambar berskala tengah alih-alih menyejajarkan tepi atas ke tepi atas tampilan gambar dan FIT_START sesuai dengan ketinggian layar dan tidak memenuhi lebar. Dan seperti yang diketahui pengguna, FIT_XY tidak mempertahankan rasio aspek.
Dengan senang hati seseorang telah memperluas ImageView untuk mendukung TOP_CROP
public class ImageViewScaleTypeTopCrop extends ImageView {
public ImageViewScaleTypeTopCrop(Context context) {
super(context);
setup();
}
public ImageViewScaleTypeTopCrop(Context context, AttributeSet attrs) {
super(context, attrs);
setup();
}
public ImageViewScaleTypeTopCrop(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setup();
}
private void setup() {
setScaleType(ScaleType.MATRIX);
}
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
float frameWidth = frameRight - frameLeft;
float frameHeight = frameBottom - frameTop;
if (getDrawable() != null) {
Matrix matrix = getImageMatrix();
float scaleFactor, scaleFactorWidth, scaleFactorHeight;
scaleFactorWidth = (float) frameWidth / (float) getDrawable().getIntrinsicWidth();
scaleFactorHeight = (float) frameHeight / (float) getDrawable().getIntrinsicHeight();
if (scaleFactorHeight > scaleFactorWidth) {
scaleFactor = scaleFactorHeight;
} else {
scaleFactor = scaleFactorWidth;
}
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);
}
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
}
https://stackoverflow.com/a/14815588/2075875
Sekarang IMHO akan sempurna jika seseorang menulis Drawable kustom yang skala gambarnya seperti itu. Kemudian bisa digunakan sebagai parameter latar belakang.
Reflog menyarankan untuk mengatur skala drawable sebelum menggunakannya. Berikut ini instruksi cara melakukannya:
Java (Android): Bagaimana skala gambar yang dapat digambar tanpa Bitmap?
Meskipun memiliki kekurangan, drawable / bitmap yang ditingkatkan akan menggunakan lebih banyak RAM, sementara scaling on the fly yang digunakan oleh ImageView tidak memerlukan lebih banyak memori. Keuntungannya bisa lebih sedikit beban prosesor.