
وهناك المشكلة, o الشوائب, أو أنهم ببساطة يريدون القيام بذلك, في كائن ImageView, في البرمجة الروبوت. إذا قمت بتعيين عرض match_parent لهذا الكائن, وعلى ارتفاع wrap_content, في حالة ما الصورة يمكنك الانتقال إلى سجل المصدر بعض أبعاد أعلى لأن لأن ImageView, يبدو أن هناك المشكلة بعض.
على المشكلة أنها تنشأ عندما يكون الصورة التي تم تعيينها للكائن ImageView انخفاض الأبعاد لهذا الكائن. وفي هذه الحالة, تظهر الصورة بأبعادها الأصلية, و لا تغطي ImageView تماما.
وفي هذه الحالة, قدر اللعب مع مختلف خيارات و سمات الكائن ImageView, ابدأ تحصل على النتيجة التي تريد. يمكنك تعديل الخاصية سكاليتيبي, أدجوستفيوبوندس, layout_height, layout_width, … ولا شيء, لن يكون لها النجاح.
كيفية جعل صورة ImageView سوف تغيير حجمها إلى حجم الكائن تماما
من أجل الحصول على والغرض من الصورة لأن ImageView تغيير حجم الكائن دون فقدان النسب الخاصة به, الحل خلق فئة Java جديدة في مشروعنا هذا تمديد الفئة ImageView و إصلاح المشكلة التي لدينا.
للقيام بذلك, في المشروع الخاص بك, Crea أ فئة جديدة. نحن ذاهبون إلى استدعاء ريسيزابليماجيفيو, والتعليمه البرمجية الخاصة بك كما يلي:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.mypackage; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizableImageView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d == null) { super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); return; } int imageHeight = d.getIntrinsicHeight(); int imageWidth = d.getIntrinsicWidth(); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); float imageRatio = 0.0F; if (imageHeight > 0) { imageRatio = imageWidth / imageHeight; } float sizeRatio = 0.0F; if (heightSize > 0) { sizeRatio = widthSize / heightSize; } int width; int height; if (imageRatio >= sizeRatio) { width = widthSize; height = width * imageHeight / imageWidth; } else { height = heightSize; width = height * imageWidth / imageHeight; } setMeasuredDimension(width, height); } } |
مرة واحدة إنشاء ه نفذت الفئة ريسيزابليماجيفيو, ما نقوم به الآن تعديل على إكس أم ال لأن تخطيط عرض أين هو ImageView المعني الذي نريد القيام به هو تغيير حجم الصورة.
فلنفترض أن, سابقا لتغيير, ImageView لتغيير XML كما يلي:
1 2 3 4 5 6 | <ImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
حسنا، فقط يجب أن تغيير الفئة من هذا الكائن الجديد الفئة التي تم إنشاؤها, بالطريقة التالية:
1 2 3 4 5 6 | <com.mypackage.ResizableImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
مع هذا الفئة والتغيير الذي طرأ تعليمات XML البرمجية, وسوف نحقق الصورة الواردة ضمن كائن ImageView سيتم تغيير حجم, الاحتفاظ التناسب, وحتى في الحالات في الصورة المراد البعد واحد أصغر من الحاوية.
