آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نمایش عکس در imageView با استفاده از resource و اسم عکس که در پوشه دراوبل هست!

farzaneh___  9 سال پیش  9 سال پیش
+1 0

سلام 

من داخل دیتابیسم یه سری اسم عکس دارم( نوع String ) که خود عکس ها داخل پوشه دراوبل هستن براساس یه id اسم عکس های موردنظرم رو داخل یه اری لیست میریزم و با اون اری لیست کارمیکنم(اری لیست از جنس همون جدول عکس هام هستش  که ستون idو نام فایل تصویر و یه کلید خارجی رو شامل میشه).

الان برا نشون دادن تصویر ها داخل imageView مشکل دارم به چند روش هم که اکثرا مشابه هستن رفتم ولی نتیجه نگرفتم

  1.  //Resources res=this.getResources();
  2. String nameFile=failName;
  3. int resId=this.getResources().getIdentifier(nameFile,"drawable",this.getPackageName());
  4. Drawable drawable=res.getDrawable(resId);
  5. is.setImageDrawable(drawable);

 

  1.  //Resources res=this.getResources();
  2. String nameFile=failName;
  3. int resId=this.getResources().getIdentifier(
  4. nameFile,"drawable",this.getPackageName());
  5. is= (ImageSwitcher) findViewById(resId);
  6. Context context=is.getContext();
  7. int id=context.getResources().getIdentifier(nameFile,"drawable",context.getPackageName());
  8. context.getPackageName();
  9. is.setImageResource(id);

این دو نمونه کد  رو کلا ارور میده و از اکتیویتی خارج میشه!!!

 

 

  1.  btnNext.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. int Iid = imageFromDB.get(counter).getImageItemId();
  5. String failName = imageFromDB.get(counter).getImageNameFile();
  6. Log.v("gallery", String.valueOf(failName));
  7. int foreignKeyImage = imageFromDB.get(counter).getForeignKeyImage();
  8. txtLocationName.setText(locationName);
  9.  
  10. String FAILNAME=String.valueOf(failName);
  11. int resid=getResources().getIdentifier(failName, "drawable",getPackageName());
  12.  
  13. Log.v("gallery res Id", String.valueOf(resid));
  14. imgView= (ImageView) findViewById(R.id.imageView);
  15. imgView.setImageResource(resid);
  16. counter++;
  17. if (counter==imageFromDB.size()) {
  18. counter=0;
  19. }
  20.  
  21. }
  22. });

کدی که فعلا بهتر از همه به حساب نتیجه داده این کده که موقع اجرا خطا نداده اماتصویری بهم نشون نمیده  درحالی که اسم فایل ها رو به درستی نمایش میده ولیidدرهر صورت برا هر تصویر 0 هست

ممنون میشم اگه کمک کنید خیلی ضروری هست.

 

 

 

+1 0
خب به جای ذخیره کردن اسم عکس به صورت رشته همون آی دیشو به صورت int ذخیره کن بعد از تابع image.setImageResource به ورودیشم همون id رو بده (9 سال پیش)
0 0
اقای کریمی میشه بیشتر توضیح بدید؟مثلا یه نمونه کد من روش های زیادی رو امتحان کردم حتی به جای اسم تنها ادرس drawableرو هم به صورت های مختلف به اسم فایل اضافه کردم اما نتیجه نگرفتم مثلا اومدم داخل اسم فایل همچین چیزی ریختم@drawable/اسم فایل یا ... , این رو مستقیم به setImageResourceدادم اما نتیجه نداد ممنون میشم اگه بیشتر توضیح بدید (9 سال پیش)
0 0
آقای فرمانی ممنون از پاسختون، سوال رو درست متوجه شدید.این روش رو داخل سایتا دیده بودم اما اول اینکه برای نام محدودیت دارم یه جورایی!بعدم بنظرم استفاده از دیتابیس و کلید خارجی معقول تر هست چون هر تصویر مثلا مربوط به یه مکان خاصه و تعداد عکس ها هم برای هر مکان متفاوت هست و این، کار رو سخت تر میکنه چون بنظرم بحث پویا بودن و اینا پیش میاد!! حالا فکر کنید بخوایم تو ورژن های بعدی تعداد عکس ها رو اضافه کنیم برای هر مکان (با شماره دار کردن عکس ها نمایششون و ... فجیعا سخته بنظر من البته). از طرفی هم چیزی که داخل پروژه تعریف شده استفاده از دیتابیس هست که نام تصاویر داخلش ذخیره شده باشه و با کلید خارجی به عکس های مورد نظر دسترسی پیداکنیم. از یه طرف دیگه من اطلاعات مربوط به تصویرهای یه مکان رو مثلا داخل یه اری لیست ذخیره کردم و میشه ب راحتی به اسم فایل ها دسترسی پیدا کرد(تقریبا چیزی شبیه اری لیستی که شما تعریف کردید و با شمارنده و اسم عکس کار کردید). این قسمتی از کد که من داخل سوال پرسیدم(کد آخر) تقریبا هر بار یک اسم میگیره وباید idش رو به دست بیاره و نمایش بده. فکر میکنم تفاوت روش من و شما تقریبا بشه گفت استفاده از bitmapهستش امامن روش شما رو تقریبا با یه تغییراتی (اجباری) اجرا کردم ولی باز هم همون مشکل صفر بودن idرو دارم همچنان صفر هستش و تصویری نشون داده نمیشششششششودددددددددددددددددددددددددددددددد. قبله کدوم وره؟؟؟؟؟؟؟!!!!!!1 (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مسعود فرمانی  9 سال پیش
+2 0

من فک نمیکنم درست متوجه صورت سوالتون شده باشم ولی طبق چیزی که برداشت کردم یه جوابی به ذهنم رسید:

فک میکنم شما تنها استفاده ای که توی این مورد از دیتابیستون کردید اینه که یه سری رشته متنی رو ازش خوندید که اینها imageName شما هستن و میخواید با استفاده از اینها به ID تصاویرتون دسترسی داشته باشید و از اون طریق تصاویر رو توی لیستی مثه ListView یا به صورت گالری نمایش بدید...

خب اگه درست متوجه شده باشم و شما توی نامگذاری تصاویرتون محدودیتی نداشته باشید پیشنهاد می کنم که از یک الگوی نام استفاده کنید که هر آیتم مثلا فقط توی یه کاراکتر عددی متفاوت باشند (مثلا picture0,picture1,picture2,picture3,.....)

با این کار شما دیگه اصن نیازی به دیتا بیس برای ذخیره سازی اسامی کاملا مستقل تصاویر و ... ندارید چون یه الگو دارید که میتونید مثلا توی یه حلقه for و با اضافه کردن شمارنده حلقه به انتهای یه رشته متنی ثابت ، اسامی تصاویرتون رو توی یه ArrayList ذخیره کنید.مثلا فرض کنید 4 تا تصویر دارید و توی فولدر Drawable قرار دادید و نامشون رو به صورت image1,image2,image3,image4 قرار دادید:

 ArrayList<String> imageNames= new ArrayList<>();
for (int i = 1; i<5;i++){
imageNames.add("image" + i);
}

خب الان اسم همه تصاویرمو توی آرایه دارم...الان میتونم ID هاشونو داشته باشم:

 ArrayList<Integer> myDrawableIds= new ArrayList<>();
 for (String name : imageNames){
int id = getResources().getIdentifier(name,"drawable",getPackageName());
myDrawableIds.add(id);
}

حالا آی دی همه تصاویرمو دارم و میتونم ازشون برای ساخت Bitmap و نمایش اون توی ImageView استفاده کنم:

 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),myDrawableIds.get(2));//مثلا اینجا آی دی ذخیره شده توی ایندکس دوم آرایه آی دی ها رو استفاده کردم

imageView.setImageBitmap(bitmap);
+1 0
عالی بود (9 سال پیش)

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