نمایش عکس در imageView با استفاده از resource و اسم عکس که در پوشه دراوبل هست!
سلام
من داخل دیتابیسم یه سری اسم عکس دارم( نوع String ) که خود عکس ها داخل پوشه دراوبل هستن براساس یه id اسم عکس های موردنظرم رو داخل یه اری لیست میریزم و با اون اری لیست کارمیکنم(اری لیست از جنس همون جدول عکس هام هستش که ستون idو نام فایل تصویر و یه کلید خارجی رو شامل میشه).
الان برا نشون دادن تصویر ها داخل imageView مشکل دارم به چند روش هم که اکثرا مشابه هستن رفتم ولی نتیجه نگرفتم
- //Resources res=this.getResources();
- String nameFile=failName;
- int resId=this.getResources().getIdentifier(nameFile,"drawable",this.getPackageName());
- Drawable drawable=res.getDrawable(resId);
- is.setImageDrawable(drawable);
- //Resources res=this.getResources();
- String nameFile=failName;
- int resId=this.getResources().getIdentifier(
- nameFile,"drawable",this.getPackageName());
- is= (ImageSwitcher) findViewById(resId);
- Context context=is.getContext();
- int id=context.getResources().getIdentifier(nameFile,"drawable",context.getPackageName());
- context.getPackageName();
- is.setImageResource(id);
این دو نمونه کد رو کلا ارور میده و از اکتیویتی خارج میشه!!!
- btnNext.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int Iid = imageFromDB.get(counter).getImageItemId();
- String failName = imageFromDB.get(counter).getImageNameFile();
- Log.v("gallery", String.valueOf(failName));
- int foreignKeyImage = imageFromDB.get(counter).getForeignKeyImage();
- txtLocationName.setText(locationName);
- String FAILNAME=String.valueOf(failName);
- int resid=getResources().getIdentifier(failName, "drawable",getPackageName());
- Log.v("gallery res Id", String.valueOf(resid));
- imgView= (ImageView) findViewById(R.id.imageView);
- imgView.setImageResource(resid);
- counter++;
- if (counter==imageFromDB.size()) {
- counter=0;
- }
- }
- });
کدی که فعلا بهتر از همه به حساب نتیجه داده این کده که موقع اجرا خطا نداده اماتصویری بهم نشون نمیده درحالی که اسم فایل ها رو به درستی نمایش میده ولیidدرهر صورت برا هر تصویر 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);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .