أندرويد تخطيط - يركز ImageView ، لكنه لا يعرض أي شيء على الشاشة (بدون تسليط الضوء)

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

سؤال

إذا قمت بتعيين ImageView ليكون قابلاً للنقر وقابل للتركيز ، فهذا يعمل ، لكن ليس لدي أي طريقة لمعرفة الصورة التي تركز. ما هي أفضل طريقة لجعلها لرسم حدود برتقالية حول المنظر حتى يعلم المستخدم أنها في الوقت الحالي؟

حاولت إسقاطه في linearlayout وإعداده ليكون قابلاً للتركيز وقابل للنقر بدلاً من ذلك ، لكن لم يكن لدي أي حظ. حتى عندما أضع هامشًا عليه ، لا يوجد شيء للإشارة إلى أنه تم اختياره.

هل كانت مفيدة؟

المحلول

يمكنك استخدام السحب مع المحدد كخلفية.

على سبيل المثال ، لدي معرض_

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">
  <item android:state_selected="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item android:state_pressed="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#FFF"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
</selector>

هذا يخلق ثلاثة خطوط 3DP مختلفة الألوان حول الصورة. فهي مرئية لأن الحشو يفرض الصورة لتقديمها في منطقة أصغر قليلاً.

تستخدم في الكود مثل SO:

image.setBackgroundResource(R.drawable.gallery_image_bg)

نصائح أخرى

الحل السريع هو استخدام مستمع ، والذي سيستجيب للنقر ، وتعيين حدود برتقالية على ImageView ...

imageView.setOnClickListener(listener)

ولكن عليك أن تفعل ذلك لجميع عناصر ImageView. على الأقل يمكنهم مشاركة نفس المستمع.

يتمثل الحل الطويل في تنفيذ عرضك الخاص ، وتمديد ImageView ، والذي يرسم حدوده البرتقالية استجابةً للنقرة.

أفترض أنك تريد أن تعمل هذا مثل أزرار الراديو ، حيث سيقوم النقر على صورة ImageView بإزالة الحدود من ImageView المحددة مسبقًا؟ لذلك ستحتاج إلى المستمع المشترك للحفاظ على مرجع إلى ImageView المحدد حاليًا ، والذي يمكن "إلغاء تحديده" عند النقر على صورة جديدة.

الإجابة المتأخرة ، ولكن يمكنك أيضًا استخدام طبقة قابلة للطبقة لمصدر الصورة. ثم لا يتعين عليك العبث بالخلفية ، الحشو ، إلخ.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top