অ্যান্ড্রয়েডে প্রোগ্রামভ্যালি ইমেজভিউয়ের চিত্র পরিবর্তন করুন


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>

এবং কোডটি ইমেজভিউ সেট করে:

     @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
এই API 14. প্রয়োগ করুন কাজ করে না:image.setImageResource(R.drawable.icon_dot1);
সাহসী

2
@ সাহসীর উত্তর সঠিক is ব্যবহার করে setBackgroundResource():( নতুন চিত্র ব্যবহার করার আগে বিদ্যমান চিত্রটি মুছে ফেলেনি .. সুতরাং আমি দুটি চিত্র সেখানে সংঘর্ষে পেলাম setImageResource()worked :) তবুও .. পোস্টটি আমাকে সঠিক পথে পেয়েছে - উভয় উত্তরের জন্য ধন্যবাদ!
জিন বো

@ মিরিসাইকেলের উত্তর যেমন বলেছে, সমস্যাটি হ'ল এক্সএমএল ব্যাকগ্রাউন্ড চিত্রটি সংজ্ঞায়িত করছে এবং কোডটি রিসোর্সের চিত্র পরিবর্তন করছে। এগুলি এক নয়। রিসোর্স ইমেজ সেট করা আসলে এখানে যা পছন্দসই, তাই এক্সএমএল ঠিক করা উচিত।
মার্টিন এপজ

3
কেন হবে না setImageResource?
ভায়োলেট জিরাফ

4
@ ভায়োলেট জিরাফ ImageView.setImageResource(R.drawable.image);আমার পক্ষে কাজ করেছেন
jonasxd360

80

এক্সএমএলে ব্যবহার করুন:

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যাতে আমি এর চারপাশে একটি সীমানা রাখতে পারি That এভাবে আপনি প্রান্তটি দেখতে পারেন 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 ()

যদি আপনি ইমেজভিউ ব্যবহার করেন 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

আপনার এক্সএমএলে চিত্র দেখার জন্য, যেখানে আপনার রয়েছে android:background="@drawable/thumbs_down পরিবর্তন করেছেনandroid:src="@drawable/thumbs_down"

বর্তমানে এটি সেই চিত্রটিকে দৃশ্যের ব্যাকগ্রাউন্ড হিসাবে রাখছে এবং এতে আসল চিত্রটি নয়।


10

এক্সএমএল ডিজাইনে

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.