অ্যান্ড্রয়েডে কীভাবে একটি চিত্রদর্শন পরিষ্কার করবেন?


277

আমি ImageViewআমার প্রদর্শনগুলির জন্য পুনঃব্যবহার করছি তবে কিছু সময় এটির মূল্য দেওয়ার দরকার নেই।

তাহলে ImageViewঅ্যান্ড্রয়েডে কীভাবে ক্লিয়ার করবেন ?

আমি চেষ্টা করেছিলাম:

mPhotoView.invalidate();
mPhotoView.setImageBitmap(null);

তাদের কেউই দৃশ্যটি সাফ করেনি, এটি এখনও পূর্ববর্তী চিত্রটি দেখায়।


1
আমি আপনার ডিফল্ট চিত্রটি লোড করার পরামর্শ দিচ্ছি যখন আপনার কোনও মূল্য নেই।
প্রবীণ

3
আমার কোনও ডিফল্ট চিত্র নেই, কেবল একটি পটভূমি। আমার ঠিক পটভূমি থাকা দরকার।
পেন্টিয়াম

আমি মনে করি গৃহীত উত্তরগুলি এখানে পরিবর্তন করা দরকার। 'ওয়ার্কআরউন্ড' উত্তর থেকে প্রকৃত উত্তরের (বা আরও ভাল উত্তর) গৃহীত উত্তরগুলি পরিবর্তন / সরানোর কোনও ব্যবস্থা কি আছে? কারণ অনেক ব্যবহারকারী (আমার মতো) আরও ভাল উত্তরের চেয়ে গ্রহণযোগ্য হয়ে যেতে পারেন
শিরীশ হারওয়াড

1
@ শিরিশহেরওয়াডে ঠিক আছে
পেন্টিয়াম

আমি একই ইস্যুটির মুখোমুখি হয়েছি আমি এটি এইভাবে করি: stackoverflow.com/a/50448536/5697474
সৈয়দ ড্যানিশ হায়দার

উত্তর:


540

আমি ডেনিসের সাথে এটি করতাম pp শেপার্ড সমাধান:

viewToUse.setImageResource(0);

এটি কাজ করে তবে এটি নথিভুক্ত করা হয়নি তাই এটি ভিউতে অন্য কোনও প্রভাব ফেলে কিনা তা সত্যই স্পষ্ট নয় (আপনি যদি চান তবে আপনি চিত্র ভিউ কোডটি চেক করতে পারেন, আমি তা করি নি)।

আমি মনে করি সেরা সমাধানটি হ'ল:

viewToUse.setImageResource(android.R.color.transparent);

আমি এই সমাধানটি সর্বাধিক কারণে পছন্দ করি যাতে রাষ্ট্রটি ফিরিয়ে আনার ক্ষেত্রে কোন জটিল কৌশল নেই এবং এটি কী করছে তাও স্পষ্ট।


3
আমি মনে করি একটি রঙ শনাক্তকারী সহ সেট ইমেজআরসোর্স ব্যবহার করা আপনাকে অ্যান্ড্রয়েড ২.২.১
ব্লুন্ডেল

2
আমার জন্য ভিউটিউস.সেটআইমেজ রিসোর্স (android.R.color.transparent) কাজ করে; কোড
জাভিয়ের

3
এ থেকে সাবধান থাকুন, যদি 0 টি আইডি সহ আপনার যদি কোনও সংস্থান থাকে তবে এটি আপনার চিত্রের দৃশ্য হিসাবে আঁকতে সক্ষম হবে। যদিও এটি আইডি হিসাবে হওয়ার সম্ভাবনাগুলি কী তা নিশ্চিত নয় ..
ক্রিস

1
আমার সেটআইমেজআর রিসোর্স (0) নিয়ে সমস্যা ছিল - সবসময় কাজ করে না। তবে স্বচ্ছতে সেট করা খুব নির্ভরযোগ্য। ধন্যবাদ!
স্কট বিগস

6
viewToUse.setImageResource(0);কাজ করে না, তবে viewToUse.setImageResource(android.R.color.transparent);কাজ করে।
zionpi

118

আমার একই রকম সমস্যা ছিল, যেখানে আমার মূলত পর্দা থেকে ইমেজভিউগুলি সম্পূর্ণরূপে অপসারণ করা দরকার। এখানে কিছু উত্তর আমাকে সঠিক দিকে নিয়ে গেছে, তবে শেষ পর্যন্ত কলটি সেট ইমেজড্রেইবল () আমার পক্ষে কাজ করেছে:

imgView.setImageDrawable(null);

(মন্তব্যে উল্লিখিত হিসাবে, এই জাতীয় ব্যবহারটি সরকারী দস্তাবেজে ডকুমেন্টেড রয়েছে: ইমেজভিউ # সেট ইমেজড্রেইবল )


3
এটি আমার অ্যাপ্লিকেশনটিতে নির্ভরযোগ্যভাবে কাজ করে। সেট ইমেজআরসোর্স (0) কখনও কখনও কাজ করে তবে অন্যের পক্ষে তা নয়।
হংকং

5
আপনি যদি ইমেজবিটম্যাপ ব্যবহার করে চিত্রটি সেট করেন তবে এটি আপনি চান
কেভিন পার্কার

এটি আমার মতে সেরা উত্তর! এটি পরিষ্কার, বৈধ এবং খুব সংক্ষিপ্ত। খালি অঙ্কনযোগ্যকে সংজ্ঞায়িত করার দরকার নেই এবং এটি প্রয়োগ করা বা এ জাতীয় স্টাফ প্রয়োগ করা দরকার।
পোটাইটো

এই উত্তরটি নির্ভরযোগ্যভাবে কাজ করে! এবং এই কোডটিকে সমাধান হিসাবে উল্লেখ করে এটি প্রথমতম পোস্ট। অতএব আমি এই উত্তরটি দিয়েছি এবং একই পোস্টে অন্য পোস্টগুলি নয়।
আসল অ্যান্ড্রয়েড

2
এই উত্তরটি সরকারী দস্তাবেজে আসলে নথিভুক্ত করা হয়েছে: developer.android.com/references/android/widget/…

79

আমি জানি এটি পুরানো, তবে আমি এটি দিয়ে সক্ষম হয়েছি

viewToUse.setImageResource(0);

এটি কাজ করা উচিত বলে মনে হচ্ছে না, তবে আমি এটি চেষ্টা করেছিলাম এবং এটি পুরোপুরি কার্যকর হয়েছিল।


2
প্রকৃতপক্ষে, এটি কোনও অবৈধ চিত্র সংস্থার কাজগুলিতে সেট করে (-1, 45, ইত্যাদি)
ড্যাভলেজো

8
না, -1 এ সেট করা আপনাকে অ্যান্ড্রয়েড কন্টেন্ট.রেস.সংশ্লিষ্ট। নটফাউন্ডএক্সেপশন দেয়। 0 কাজ করে বলে মনে হচ্ছে।
নাটেস

28
এই ক্ষেত্রে, আপনি যখন নিজের তালিকার ভিউ স্ক্রোল করছেন। যেভাবে ইমেজভিউ 0 হিসাবে সেট করা হয়েছে তা ভুল চিত্রটি দেখায় (এটি অন্য চিত্রদর্শন থেকে চিত্রটি দেখায়) তাই নীচের রেজোলিউশনটি এটি দেখতে পারেনউটিউস.সেটআইমেজআরসোর্স (android.R.color.transparent) করতে পারে;
ফ্রুট এ.সুক

3
এই পদ্ধতিটি চেষ্টা করার পরে আমি এই ত্রুটিটি একবার পেয়েছি: "android.content.res.Ses উত্স $ নটফাউন্ডএক্সেপশন: রিসোর্স আইডি # 0x0", সুতরাং দেখে মনে হচ্ছে যে খালি চিত্র সেট করা ইমেজভিউকে "সাফ" করার সেরা উপায়
পাভেল আলেক্সিভ

16

দেখে মনে হচ্ছে আপনি যা চান তা কোনও ডিফল্ট চিত্র যা আপনার ইমেজভিউকে কোনও আলাদা চিত্র প্রদর্শন না করে সেট করার জন্য সেট করে। পরিচিতি অ্যাপ্লিকেশনটি এটি করে:

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}

67
না, আমি এটি চাই না আমি শুধু বিষয়বস্তু সাফ করতে চাই। ব্যবহারকারী এর পরে নতুন চিত্র নির্বাচন করতে পারে।
পেন্টিয়াম

3
পরিচিতি অ্যাপ্লিকেশনটি ওপেন সোর্স ( android.git.kernel.org/?p=platform/packages/apps/… )। আমি সোর্স কোডটি তদন্ত করেছি। দেখা যাচ্ছে যে তারা কুইককন্ট্যাক্টবেজ (ইমেজভিউয়ের একটি সাবক্লাস) ব্যবহার করছে এবং যখন তাদের কোনও ফটো নেই, তখন তারা একটি ডিফল্ট চিত্র সেট করতে সেট-ইমেজআর রিসোর্স ব্যবহার করে। Com.android.contacts.ContactsListActivity # কন্টাক্ট আইটেমলিস্ট অ্যাডাপ্টার বিশদ, বিশেষত getView () এ দেখুন।
ড্যান লিউ

9
আপনি যে উত্তরটি চান তা যদি না হয় তবে কেন আপনি উত্তরটি সঠিক হিসাবে পরীক্ষা করেছেন?
আরনিওতাকি

3
ড্যানিয়েল লোকেরা কেন চিত্রটি পরিষ্কার করতে চায় তার অনেক কারণ থাকতে পারে।
কে - এসও-তে বিষক্রিয়া বাড়ছে।

1
তিনি কোনও ডিফল্ট চিত্র চান না। তিনি চান এটি পরিষ্কার হোক।
এপিকপান্ডাফোরস

13

আমি ইমেজভিউতে চিত্র এবং ড্রয়যোগ্য ক্যাশে সাফ করার জন্য এটি চেষ্টা করেছি

ImgView.setImageBitmap(null);
ImgView.destroyDrawingCache();

আমি আশা করি এটি আপনার পক্ষে কাজ করে!


9

যদি এই সমাধানগুলির কোনওটি ইতিমধ্যে সেট করা কোনও চিত্র সাফ না করে (বিশেষত setImageResource(0)বা setImageResources(android.R.color.transparent), বর্তমান চিত্রটি ব্যাকগ্রাউন্ড setBackgroundDrawable(...)বা এর অনুরূপ কিছু ব্যবহার করে সেট করা হয়নি তা নিশ্চিত হয়ে দেখুন ।

আপনার কোডটি আপনার পূর্ববর্তী পৃষ্ঠায় চিত্রের সংস্থানটি সুনির্দিষ্টভাবে সেট করবে যে আপনি সেট করেছেন সেই ব্যাকগ্রাউন্ড চিত্রের সামনে স্বচ্ছ কিছু এবং এখনও দেখাবে।


6

আরে আমি জানি আমি এই উত্তরের জন্য খুব দেরি করেছি, তবে কেবল ভেবেছিলাম আমাকে এটি ভাগ করে নিতে হবে,

আপনি যখন চিত্রটি পুনরায় সেট করবেন তখন কল করার যে পদ্ধতিটি আপনি সেট করার সময় অবশ্যই ডাকছিলেন u

তোমার দর্শন লগ করা রিসেট করতে চান, তখন চিত্রের উৎস @ dennis.sheepard উত্তর জরিমানা শুধুমাত্র যদি তোমার দর্শন লগ করা মূলত ব্যবহার বিটম্যাপ ইমেজ সেটিং হয় কাজsetImageResource()

এই ক্ষেত্রে,

আমি ব্যবহার করেছি setImageBitmap()এবং তাই সেটিংটি setImageResource(0)কাজ করে না, পরিবর্তে আমি ব্যবহার করি setImageBitmap(null)


1
আপনি ঠিক অজয়, আমি একই পর্যবেক্ষণ। আমি শর্তের উপর নির্ভর করে একই চিত্র দর্শনের জন্য বিকল্পভাবে setImageBitmap () / setImageResource () ব্যবহার করেছি। তাই আমাকে চিত্রদর্শন সাফ করার জন্য setImageResource (0) / setImageBitmap (নাল) অল্টারনেটিভলি ব্যবহার করতে হয়েছিল। ধন্যবাদ!
মনিকা এম

5

আপনি যদি গ্লাইড ব্যবহার করেন তবে আপনি এটি এটি করতে পারেন।

Glide.with(yourImageView).clear(yourImageView)

ধন্যবাদ রিফিগ, এটি প্রচুর সাহায্য করে।
ucMedia

3

আমি একটি অঙ্কনযোগ্য (খালি_ সাদা_শ্যাপি.এমএমএল এর মতো কিছু) সংজ্ঞায়িত করে এটি অর্জন করতে সক্ষম হয়েছি:

<shape xmlns:android="http://schemas.android.com/apk/res/android"       
       android:shape="rectangle">
    <solid android:color="@android:color/white"/>
</shape>

তারপরে আমি যখন চিত্রের দৃশ্যটি সাফ করতে চাই তখন কেবল কল করি

 imageView.setImage(R.drawable.blank_white_shape);

এটি আমার জন্য সুন্দরভাবে কাজ করে!


2

লিস্টভিউ আইটেম চিত্রের জন্য আপনি "নো ইমেজ" কেসের জন্য তালিকা অ্যাডাপ্টার সেট করতে পারেন ImageView.setVisibility(View.INVISIBLE)বা ImageView.setImageBitmap(null)তালিকায় রাখতে পারেন ।


2

যেহেতু কোওয়াসি লিখেছেন এবং গোলু সম্পাদিত হয়েছে, আপনি সাদা পরিবর্তে স্বচ্ছ ব্যবহার করতে পারেন:

ফাইল drawable/transparent.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@android:color/transparent"/>
</shape>

কোনও ক্রিয়াকলাপ, দর্শন ইত্যাদির ভিতরে:

view.setImageResource(R.drawable.transparent);

1

এটি আমার পক্ষে কাজ করে।

emoji.setBackground(null);

এটি রানটাইমের সময় ক্র্যাশ হয়ে গেছে।

viewToUse.setImageResource(android.R.color.transparent);  

0

ইমেজভিউ ব্যবহার করে ছবিটি সরাতে:

title_image.setImageResource(-1);

এটি আমার পক্ষে কাজ করে


0

আপনি যদি সমর্থন লাইব্রেরিটি ব্যবহার করেন তবে এটির AppCompatImageViewপরিবর্তে আপনি পাবেন ImageViewযা setImageResource(0)সমস্ত ডিভাইসে সমর্থন করে, সুতরাং এটির ব্যবহার setImageDrawable(null)এবং ঠিক একইভাবে ব্যবহার করা আপনার উচিতsetImageBitmap(null)

অন্যথায়, এটি কিছু অ্যান্ড্রয়েড সংস্করণ থেকে শুরু করে সূক্ষ্মভাবে কাজ করা উচিত। অ্যান্ড্রয়েডের কোড অনুসারে এবং আমার পরীক্ষাগুলি অনুসারে, আমি মনে করি এটি setImageResource(0)অ্যান্ড্রয়েড এপিআই 22 (5.1) থেকে ব্যবহার করা নিরাপদ হওয়া উচিত । আপনি এখানে API 22 বনাম এপিআই 21 এর অ্যান্ড্রয়েড কোড দেখতে পারেন


0

আমি একই সমস্যার মুখোমুখি হয়েছি আমি ব্যাকগ্রাউন্ডের রঙের বিন্যাসটিকে ব্যাকগ্রাউন্ডের রঙের লেআউটে বদলেছি আপনি এটি করতে পারেন:

 edit_countflag.setBackgroundColor(Color.parseColor("#ffffff"));

// তারপরে ছবিটি সেট করুন

edit_countflag.setImageResource(R.drawable.flag_id);

0

আমি ব্যবহার করে ইমেজভিউয়ের চিত্রটি সরিয়ে দেওয়ার চেষ্টা করেছি ImageView.setImageRessource(0)কিন্তু এটি আমার পক্ষে কার্যকর হয়নি।
ভাগ্যক্রমে আমি এই বার্তাটি লগগুলিতে পেয়েছি:

Caused by: java.lang.IllegalStateException: The specified child already has a parent. 
You must call removeView() on the child's parent first.

সুতরাং আসুন আমরা বলি layoutmanagerযে লেআউটটির জন্য এটি আপনার উদাহরণ , যা আপনার এটি করা দরকার:

RelativeLayout layoutManager = new RelativeLayout(this);
ImageView image = new ImageView(this);

// this line worked for me
layoutManager.removeView(image);

-1

আপনি কী সেট করতে চাইছেন এবং ইন্টের যেখানে এটির একটি অঙ্কনীয় প্রত্যাশা রয়েছে তা কেবল আমি কী উল্লেখ করতে পারি?

আপনি নিম্নলিখিত না করা উচিত?

imageview.setImageDrawable(this.getResources().getDrawable(R.drawable.icon_image));

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.