Android में प्रोग्राम इमेज की छवि बदलें


114

जब मैं छवि को प्रोग्रामेटिक रूप से बदलता हूं, तो यह पुरानी छवि के शीर्ष पर नई छवि दिखाता है जो मूल रूप से लेआउट फ़ाइल में सेट है?

यहाँ मेरे लेआउट फ़ाइल का एक टुकड़ा है:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="39dp"
    android:gravity="center_vertical" >
    <ImageView
        android:id="@+id/qStatusImage"
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_margin="5dp"
        android:background="@drawable/thumbs_down"
         />

    <TextView
        android:id="@+id/grp_child"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textColor="@color/radio_colors"
        android:textStyle="normal"
        android:background="@color/grey"
    />

 </LinearLayout>

और कोड जो imageView सेट करता है:

     @Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
//Answers
            if(answersGroup != null)
                   answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                       @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {

                         //  int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId()));

                           qImageView = (ImageView) V.findViewById(R.id.qStatusImage);
                           if(ans ==0 || ans == 5){
                            //   qSV.setImageResource(0);
                               qImageView.setImageResource(R.drawable.thumbs_up);
                           }
                           else
                               qImageView.setImageResource(R.drawable.thumbs_down);

                       }
                   });

मैं क्या खो रहा हूँ?

जवाबों:


179

ऐसा इसलिए होता है क्योंकि आप ImageViewबैकग्राउंड के बजाय src सेट कर रहे हैं ।

इसके बजाय इसका उपयोग करें:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

यहाँ एक धागा है जो दो तरीकों के बीच अंतर के बारे में बात करता है।


34
यह एपीआई 14 में काम नहीं करता है। उपयोग करना चाहिए:image.setImageResource(R.drawable.icon_dot1);
बहादुर

2
@ बहादुर का जवाब सही है। उपयोग करना setBackgroundResource():( नई छवि का उपयोग करने से पहले मौजूदा छवि को नहीं हटाया था .. इसलिए मुझे वहां से टकराते हुए दो चित्र मिले। setImageResource()काम किया :)। फिर भी .. पोस्ट मुझे सही रास्ते पर मिली - दोनों उत्तर के लिए मेरा धन्यवाद!
जीन बो

जैसा कि @mricyicy का जवाब है, समस्या यह है कि xml पृष्ठभूमि छवि को परिभाषित कर रहा है और कोड संसाधन छवि को बदल रहा है। वे समान नहीं हैं। संसाधन छवि सेट करना वास्तव में यहां वांछित है, इसलिए xml को ठीक किया जाना चाहिए।
मार्टिन एप्सज

3
क्यों नहीं setImageResource?
वायलेट जिराफ

4
@VioletGiraffe ImageView.setImageResource(R.drawable.image);ने मेरे लिए काम किया
jonasxd360

80

XML में उपयोग करें:

android:src="@drawable/image"

स्रोत का उपयोग करें:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));

47

संक्षिप्त जवाब

बस अपने res/drawableफ़ोल्डर में एक छवि की प्रतिलिपि बनाएँ और उपयोग करें

imageView.setImageResource(R.drawable.my_image);

विवरण

उत्तर की विविधता थोड़ा भ्रम पैदा कर सकती है। हमारे पास है

Backgroundउनके नाम के तरीके सभी Viewवर्ग के हैं, ImageViewविशेष रूप से नहीं । लेकिन जब ImageViewसे Viewआपको विरासत में मिला है, उनका उपयोग कर सकते हैं, भी। Imageउनके नाम के तरीके विशेष रूप से हैं ImageView

Viewतरीकों सब एक दूसरे के रूप में ही काम करते हैं (हालांकि setBackgroundDrawable()तो हम बस पर ध्यान दिया जाएगा हटाई गई है), setBackgroundResource()। इसी तरह, ImageViewतरीके सभी एक ही काम करते हैं, इसलिए हम सिर्फ ध्यान केंद्रित करेंगे setImageResource()। विधियों के बीच एकमात्र अंतर यह है कि वे किस प्रकार के पैरामीटर से गुजरते हैं।

सेट अप

यहाँ एक FrameLayoutहै जिसमें एक है ImageViewImageViewशुरू में यह किसी भी छवि नहीं है। (मैंने केवल FrameLayoutइतना जोड़ा है कि मैं इसके चारों ओर एक सीमा लगा सकता हूं। इस तरह आप इसके किनारे देख सकते हैं ImageView।)

यहां छवि विवरण दर्ज करें

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:background="@drawable/border"
        android:layout_centerInParent="true">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </FrameLayout>
</RelativeLayout>

नीचे हम विभिन्न तरीकों की तुलना करेंगे।

setImageResource ()

यदि आप ImageView का उपयोग करते हैं setImageResource(), तो छवि अपने पहलू अनुपात को बनाए रखती है और फिट होने के लिए आकार बदल जाती है। यहां दो अलग-अलग छवि उदाहरण हैं।

  • imageView.setImageResource(R.drawable.sky);
  • imageView.setImageResource(R.drawable.balloons);

यहां छवि विवरण दर्ज करें

setBackgroundResource ()

setBackgroundResource()दूसरी ओर, व्यू का उपयोग करने से दृश्य को भरने के लिए छवि संसाधन को बढ़ाया जा सकता है।

  • imageView.setBackgroundResource(R.drawable.sky);
  • imageView.setBackgroundResource(R.drawable.balloons);

यहां छवि विवरण दर्ज करें

दोनों

दृश्य की पृष्ठभूमि छवि और छवि दृश्य की छवि अलग-अलग खींची गई हैं, इसलिए आप उन दोनों को सेट कर सकते हैं।

imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);

यहां छवि विवरण दर्ज करें


1
निम्नलिखित पर ध्यान दें setImageResource:Sets a drawable as the content of this ImageView. This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup. If that's a concern, consider using setImageDrawable(Drawable) or setImageBitmap(Bitmap) and android.graphics.BitmapFactory instead.
विलियम रीड ने

27
qImageView.setImageResource(R.drawable.img2);

मुझे लगता है कि यह आपकी मदद करेगा


13

छवि को देखने के लिए अपने XML में, जहाँ आपने इसे android:background="@drawable/thumbs_down बदल दिया हैandroid:src="@drawable/thumbs_down"

वर्तमान में यह उस छवि को दृश्य की पृष्ठभूमि के रूप में रख रहा है, न कि वास्तविक छवि को।


10

XML डिजाइन में

android:background="@drawable/imagename 
android:src="@drawable/imagename"

कोड के माध्यम से चित्र

imageview.setImageResource(R.drawable.imagename);

सर्वर छवि

  ## Dependency ##

  implementation 'com.github.bumptech.glide:glide:4.7.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

  Glide.with(context).load(url) .placeholder(R.drawable.image)
   .into(imageView);

 ## dependency  ##
 implementation 'com.squareup.picasso:picasso:2.71828'

 Picasso.with(context).load(url) .placeholder(R.drawable.image)
 .into(imageView);

0

आप उपयोग कर सकते हैं

val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)

या जावा जावा में

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.