بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

تعویض resource در ImageView 

مدیریت گفتگو
JSONObject 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام

دوتا ImageView دارم که میخوام با تاچ رو هر کدوم Resource  هاشون با هم عوض شه

خودم اینو مینویسم ولی میگه محتویات setImageResources باید int باشه

img1.setImageResource(img2.getResources());

چیکار کنم ؟

پیشاپیش از کمکتون ممنونم

نظرات

پاسخ‌ها 9

مجتبی یگانه 12 سال پیش

عذر خواهی ! ، دستور قبلی اشتباه بود ، برای رفع ابهام نحوه ی استفاده از اونم میگم 

setImageDrawable(getResources().getDrawable(R.drawable.icon));

اما در کل این دستور ساده تره :

img.setImageResource(R.drawable.img);

اگه گیره اینی که چرا int میگیره ، علت رو من اینجوری فهمیدم ! 

تو فایل R.java که توی پوشه ی gen هست ، آدرس یه خونه از حافظه رو به صورت Hex درون یه متغییر int ذخییره میکنه ، اگه بازش کنی میبینی ! اینم یه نمونه دستور

public static final int img=0x7f020000;

حالا تو وقتی ریسورس رو عوض کنی تمومه دیگه ! ، نمیدونم چرا اینفدر کشش میدی ، نشد پروژه رو بزار دان کنیم ، ولی پروژه ی لامپ که فکر کنم  پارت 3 هست رو حتما ببین

نظرات

JSONObject 12 سال پیش
اینو که نوشتم گفت img یه ImageView هست و میخوای توش چیزی از جنس Drawable بریزی (Error داد)
مجتبی یگانه 12 سال پیش
احمد فیلم کردی ما رو ؟! ، الان از پروژه ی خودم چک کردم ، برو تست کن مگو چیست تست !
JSONObject 12 سال پیش
الوووووووووووووووووووووووو اینجا نمیشه عکس گذاشت برو پایین ببینش
JSONObject 12 سال پیش
داداش مرسی که انقدر پی گیری ولی خدا شاهده مشکل حل نشد، یعنی اصلا با جواب قبلیت که الان تصحیحش کردی یه سوال دیگه بوجود آوردی که دمت گرم اونو حلش کردی ولی سوال خودم هنوز سر جاشه
JSONObject 12 سال پیش
خودم احساس میکنم که باید یه فایل xml براش نوشت ؛ حالا تا پنج شنبه صبر میکنیم ببینیم استاد چی میگه ( آقا بهنام اینو تا آخر بخونی بعد جواب بدی ها ، دمت گرم )
مجتبی یگانه 12 سال پیش
گفتم ، یا شما خیلی عجیبی ، یا من خیلی غریبم ! ، پروژه بزار چک کنیم
uncocoder 12 سال پیش
جواب من رو بخونید :) اما مثل خودتون که منو مجبور کردید تا آخرش بخونم، شما هم تا آخرش بخونید :)
JavaDroid 12 سال پیش

بهتره هنگامی که به یک imageview تصویری رو نسبت می دید به خاصیت tag آن هم ان تصویر را نسبت دهید تا به راحتی از آن استفاده کنید .

img1.setImageResource(R.drawable.image1); 
img1.setTag(Integer.valueOf(R.drawable.image1));

img2.setImageResource(R.drawable.image2);
img2.setTag(Integer.valueOf(R.drawable.image2));


و اینگونه جابجا کنید

 img1.setImageResource(img2.getTag());

 

نظرات

JSONObject 12 سال پیش
داداش این کاری که تو کردی داره با یه عکس امتحان میشه (اسم ِ یه عکس) ولی من میخوام با Source کار کنم یعنی ممکنه سریِ بعد دیگه این عکس نباشه یه عکس دیگه با یه اسم دیگه ای توش باشه( اما تو اینجا داری tag رو به یه عکس منحصر به فرد میدی)
JSONObject 12 سال پیش

الو بیا اینجا(این عکس ِ خطاست)

نظرات

مجتبی یگانه 12 سال پیش
پاسخ تصحیح شد ! ، برو دریا شو ، مزاحمت نمیشم
JSONObject 12 سال پیش

اصل خواسته ام اینه: که اگه رو قرمزه تاچ شد سبزه بشه قرمزه    و    همزمان قرمزه بشه سبزه(نه اینکه تبدیل شن ، جاشون عوض شه)
و در مورد آبیه هم الان اگر روش تاچ شد بشه قرمزه (چون الان بزرگه قرمز شده) و قرمزه بشه آبیه  و حالا که جاشون عوض شده برعکس 

نظرات

javac 12 سال پیش

باید از این متد استفاده کنید:

 setImageResource()

 که استاد هم توی یکی از فیلم ها(دقیقا یادم نیست کدوم بود!) طریقه ساخت یک لامپ ،که با کلیک کردن روشن و خاموش میشد رو آموزش داده بود.

نظرات

Hajhosseini 12 سال پیش

منم این مشکل رو داشتم ولی از یک راه دیگه حلش کردم.میخواستم عکسی که بین 4 تا ImageView که هر 3 ثانیه عکساشون عوض میشه و کلیک شده رو بگیرم و در فرم بعدی فول سایز و با اسکرول افقی و عمودی نشونش بدم.
برای این کار مجبور شدم زمانی که ImageView رو مقداردهی میکنم یک متغیر String هم مقدار بدم و برای فرستادن آدرس عکس از اون متغیر استفاده کنم

نظرات

مجتبی یگانه 12 سال پیش
روش درستیه ، اما ساده تر اینه که از همون TAG استفاده بشه ، نوعش هم فکر کنم OBJECT هست که کار رو ساده تر میکنه ! پاسخ سوم همینه ، ولی نوعش رو تغییر داده که یکم کار رو سخت کرده !
JSONObject 12 سال پیش
دادش اگه میشه کدش رو بذار ببینیم
Hajhosseini 12 سال پیش

کد ها خیلی زیاده و بر اساس گفته ی استاد فقط قسمتی که مورد استفاده ی شماس رو گذاشتم

فرستادن به فرم بعدی :

 OnClickListener imageClickListener = new OnClickListener() {

   @Override
   public void onClick(View image) {

    Intent intent = new Intent(ActivityMain.this, ActivityDownload.class);
    intent.putExtra("THUMBNAIL_LOCAL_SOURCE", selectedFileSdcardPath);
    ActivityMain.this.startActivity(intent);
                                   }
                                                           };

پر کردن ImageView ها :

 public static void setImageBackground(String request) {
        if (request.contains("image-thumbnail-" + imageIndex + ".jpg")) {
            Bitmap bitmap = BitmapFactory.decodeFile(request);
img[0].setImageBitmap(bitmap); } else if (request.contains("image-thumbnail-" + (imageIndex + 1) + ".jpg")) { Bitmap bitmap = BitmapFactory.decodeFile(request); img[1].setImageBitmap(bitmap); } else if (request.contains("image-thumbnail-" + (imageIndex + 2) + ".jpg")) { Bitmap bitmap = BitmapFactory.decodeFile(request); img[2].setImageBitmap(bitmap); } else if (request.contains("image-thumbnail-" + (imageIndex + 3) + ".jpg")) { Bitmap bitmap = BitmapFactory.decodeFile(request); img[3].setImageBitmap(bitmap); }
selectedFileSdcardPath = request;
}

نظرات

uncocoder 12 سال پیش

وای بچه ها من قاطی کردم. خدا به داد برسه.

اول از همه ، می دونیم که چطور میشه یک Resource رو روی ImageView بارگزاری کرد ( در واقع به گفته دوستان پروژه لامپ هست )

دوم از همه :) می رسیم اینجا که از کجا بفهمیم که هر ImageView کدوم Resource رو داره که هزار تا راه فوق العاده ساده داریم:

روش اول

بجای استفاده از Resource از Bitmap استفاده کنید، مثلاً

Bitmap bitmapRed = BitmapFactory.decodeResource(getResources(), R.drawable.red);
img1.setImageBitmap(bitmapRed);

بعدش بجای مقایسه از این عبارت استفاده کنید:

Bitmap imageSource = ((BitmapDrawable) img1.getDrawable()).getBitmap();
if (imageSource == bitmapRed){
Log.i("LOG", "img1 source is R.drawable.red");
}

روش دوم

از این عبارت برای مقایسه استفاده کنید ( زمانیکه Resource بجای Bitmap بارگزاری کردید )

if (img1.getDrawable().getConstantState().equals(
getResources().getDrawable(R.drawable.red).getConstantState())) {

Log.i("LOG", "img1 source is R.drawable.red");
}

روش سوم

به گفته ALU جان از setTag استفاده کنید.

روش چهارم

از HashMap به شکل زیر استفاده کنید:

HashMap<ImageView, Integer> resourceMap = new HashMap<ImageView, Integer>();

//after setImageResource do
resourceMap.put(img1, R.drawable.red);

//for get loaded resource
int resource = resourceMap.get(img1);

روش پنجم

از یک MyImageView استفاده کنید:

public class MyImageView extends ImageView {

....

private int imageResource;

public void setResource(int resource){
this.setImageDrawable(resource);
this.imageResource = resource;
}

public int getResource(){
return this.imageResource;
}
}

دیگه 995 روش دیگه با خودتون :)

 

و اما راه حل مشکل شما ( زمانی که فقط تعویض مد نظرتون باشه و نه مقایسه )

Drawable img1Drawable = img1.getDrawable();
Drawable img2Drawable = img2.getDrawable();
img1Drawable.setImageDrawable(img2Drawable);
img2Drawable.setImageDrawable(img1Drawable);

به همین سادگی و به همین خوشمزگی

نظرات

JSONObject 12 سال پیش

مرسی استاد عجله ای نیست اما اگه و اگه وقت کردین ویدئوی اینها رو هم لطفا تدوین کنید

اما تو آخرین بخش جوابتون که جواب سوال منو دادین وقتی اول img1 رو مقدار دهی میکنم و تبدیل به مقدار img2 میشه دیگه تبدیل شده،  خط بعد که اجرا میشه چون جفت ِتصاویر الان یکی شده دیگه تعویضشون معنی نداره ، به این صورت که وقتی کد به شکل ِ

 img2.setImageDrawable(img1.getDrawable());
 img1.setImageDrawable(img2.getDrawable());

نوشته میشه، دو تصویر تبدیل به تصویر  ِimg1 میشه و وقتی به صورت  ِ

 img1.setImageDrawable(img2.getDrawable());
 img2.setImageDrawable(img1.getDrawable());

نوشته میشه، دو تصویر به تصویر  ِimg2  تبدیل میشن

چه باید کرد؟

نظرات

uncocoder 12 سال پیش
شما سورس من رو دقت کن. اول ریختمشون تو دو تا اشاره گر و بعد از اشاره گرها ریختم روی SetImageDrawable . چک کن خبر بده.
JSONObject 12 سال پیش
استاد ببخشید بعد دو هفته دارم میخونم نظرتونو ، خواستم بگم مث همیشه حق با شما بود (دمت قیژژژژژژ استاد)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .