यह सबसे बेहतर समाधान नहीं है, लेकिन जैसा कि किसी ने पृष्ठभूमि के बजाय सुझाव दिया है कि आप फ्रेमलेयआउट या रिलेटिवलैट बना सकते हैं और ImageView को छद्म पृष्ठभूमि के रूप में उपयोग कर सकते हैं - अन्य तत्व इसके ठीक ऊपर की स्थिति में होंगे:
<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 के साथ समस्या यह है कि केवल उपलब्ध पैमाने हैं: CENTER, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, FIT_END, FIT_START, FIT_XY, MATRIX ( http://etcodehome.blogspot.de/2011/05/android-imcalview.scalview) )
और कुछ मामलों में, जब आप पूरी स्क्रीन (उदाहरण के लिए पृष्ठभूमि की छवि) और छवि का पहलू अनुपात छवि को भरने के लिए अलग-अलग चाहते हैं, तो "स्केल बैकग्राउंड इमेज (इसके पहलू अनुपात को ध्यान में रखते हुए) को स्केल करना आवश्यक है। TOP_CROP की, क्योंकि:
CENTER_CROP छवि के शीर्ष किनारे के शीर्ष किनारे को संरेखित करने के बजाय स्केल की गई छवि को केंद्र में रखता है और FIT_START स्क्रीन की ऊँचाई को फिट करता है और चौड़ाई को नहीं भरता है। और उपयोगकर्ता Anke के रूप में देखा FIT_XY पहलू अनुपात नहीं रखता है।
ख़ुशी की बात है कि किसी ने TOP_CROP का समर्थन करने के लिए ImageView को बढ़ाया है
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
अब IMHO सही होगा अगर किसी ने कस्टम ड्रॉबल लिखा है जो उस तरह की छवि को मापता है। तब इसे बैकग्राउंड पैरामीटर के रूप में इस्तेमाल किया जा सकता था।
Reflog का उपयोग करने से पहले drawable को निर्धारित करने का सुझाव देता है। यहाँ निर्देश है कि यह कैसे करना है:
जावा (एंड्रॉइड): बिटमैप के बिना ड्रॉबल को कैसे स्केल किया जाए?
हालांकि इसका नुकसान है, कि अपकेंद्रित ड्रॉबल / बिटमैप अधिक रैम का उपयोग करेगा, जबकि ImageView द्वारा उपयोग किए जाने वाले मक्खी पर स्केलिंग के लिए अधिक मेमोरी की आवश्यकता नहीं होती है। लाभ कम प्रोसेसर लोड हो सकता है।