Bu en performanslı çözüm değildir, ancak arka plan yerine birisinin önerdiği gibi, FrameLayout veya RelativeLayout oluşturabilir ve ImageView'u sözde arka plan olarak kullanabilirsiniz - diğer öğeler basitçe onun üzerinde konumlandırılacaktır:
<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>
ImageView ile ilgili sorun, yalnızca mevcut scaleType'ların şunlardır: 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 )
ve bazı durumlarda, bir görüntünün tüm ekranı doldurmasını istediğinizde (örneğin, arka plan görüntüsü) ve ekranın en boy oranının görüntününkinden farklı olması durumunda, "arka plan görüntüsünü ölçeklemek (en boy oranını koruyarak)" için gerekli scaleType türdür TOP_CROP içinde, çünkü:
CENTER_CROP, üst kenarı görüntü görünümünün üst kenarına hizalamak yerine ölçeklenen görüntüyü ortalar ve FIT_START ekran yüksekliğine sığar ve genişliği doldurmaz. Ve Anke kullanıcısının farkına göre FIT_XY en boy oranını korumuyor.
Memnuniyetle birisi ImageView'u TOP_CROP'u destekleyecek şekilde genişletti
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
Şimdi, birisi görüntüyü bu şekilde ölçeklendiren özel Drawable yazarsa IMHO mükemmel olurdu. Daha sonra arka plan parametresi olarak kullanılabilir.
Reflog, kullanmadan önce çekilebilirliği önceden ölçeklendirmenizi önerir. İşte bunun nasıl yapılacağına dair talimat:
Java (Android): Bitmap olmadan bir çizim nasıl ölçeklenir?
Dezavantajı olmasına rağmen, yükseltilmiş çekilebilir / bitmap daha fazla RAM kullanır, ImageView tarafından kullanılan anında ölçeklendirme daha fazla bellek gerektirmez. Avantaj, daha az işlemci yükü olabilir.