ImageView المتضخمة لوضع في GalleryView ليس هو الحجم الصحيح

StackOverflow https://stackoverflow.com/questions/2869749

  •  03-10-2019
  •  | 
  •  

سؤال

أحاول تضخيم صورة ImageView التي تتواصل مع السحب التي يمكنني عرضها في معرض المعرض. يبدو أن الكود الخاص بي لتضخيم العرض يعمل بشكل جيد ، إلا أنه لا يتم تطبيق سمات ImageView. على وجه التحديد ، لا يحتوي ImageView المتضخم على العرض/الارتفاع الذي قمت بتعيينه عبر Android: Playout Params في XML.

هل يمكن لأحد أن يريني ما أفعله خطأ؟

أرغب في ضبط عرض/ارتفاع الصورة في موانئ دبي ، بحيث يكون الحجم الصحيح عبر العديد من شاشة DPIs ودعم Android 1.5+. نتيجة لذلك ، لا يمكنني استخدام شيء مثل:

i.setLayoutParams(new Gallery.LayoutParams(150, 116)

تعريف التصميم الخاص بي هو:

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="150dp" android:layout_height="116dp"
    android:background="@drawable/gallery_item_background"
    android:scaleType="fitXY" />
</ImageView>

والقتل الذي أستخدمه لتضخيم ImageView هو:

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        ImageView i = (ImageView) inflater.inflate(R.layout.gallery_item, null);
        i.setImageResource(mImageIds.get(position));
        i.setScaleType(ImageView.ScaleType.FIT_XY);

        return i;
    }
هل كانت مفيدة؟

المحلول

الحيلة هي ببساطة استخدام الإصدار التالي من inflate():

inflater.inflate(R.layout.gallery_item, parent, false);

المعلمتان الأخيرتان إلزاميتان. إذا قمت بتمرير "NULL" بصفتك الوالد ، فإن Inflater لا يعرف نوع معلمات التخطيط التي يجب إنشاءها وبالتالي يتجاهل كل android:layout_ سمات XML. تخبر المعلمة الأخيرة ببساطة Inflater بعدم إضافة طريقة العرض المتضخمة إلى الوالد على الفور. إذا مررت بشكل صحيح (على الأقل داخل محول getView() الطريقة) ، ستحدث الأشياء السيئة.

نصائح أخرى

لست متأكدًا ولكن هذا قد يعمل. أعط معرفًا لـ ImageView الخاص بك في XML الخاص بك (قل أنه "@+ID/IMATE":

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = getLayoutInflater();
    View view = (View) inflater.inflate(R.layout.gallery_item, null);
    ImageView i = (ImageView) view.findViewById(R.id.image);
    i.setImageResource(mImageIds.get(position));
    i.setScaleType(ImageView.ScaleType.FIT_XY);

    return view;
}

بالمناسبة ، يجب عليك تحسينه للتحقق مما إذا كان ConvertView فارغًا من أجل إعادة تدوير طرق العرض. افحص هذا: http://code.google.com/events/io/2009/sessions/turbochargeuiandroidfast.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top