PDA

Prikaži potpunu verziju : Gubljenje vrednosti imageview-a pri rotiranju ekrana - Android aplikacija


sashar
28.3.2013, 21:10
Ovaka, radim aplikaciju pomocu koje ce moci da se posalje slika i neki tekst, aplikacija treba da bude optimozovana za sto veci broj uredjaja (telefoni i tableti). Imam dva imageview-a na kojim u kodu podesavam sliku koju je korisnik odabrao. U prvom trenutku sam problem pri rotiranju(da ostane ta slika koju je korisnik odabrao) resio time sto sam u manifestu podesio android:configChanges="orientation|keyboardHidden|screenSize" i to je lepo radilo, ali se problem javio da kada sam hteo da npr da za tablet rasirim celu aplikaciju (povecam neke margine), preko podesavanje value za odredjeni uredjaj, posto sam morao da obrisem gore navedeni tag da bi to radilo. Problem je sto sto mogu lepo margine da podesim ali se gubi slika zato sto se sve ponovo ucitava. Jedino resenje koje sad imam u glavi je da npr sacuvam te slike u bundle objektu pa da ih onda ubacim pri ucitavanju... Moje pitanje glasi da li postoji neko elegantnije resenje da sacuvam vrednosti imageview-a a da to nije preko koda? Izvinjavan se zbog malo duzeg teksta i hvala unapred.:)

Ivan452
8.4.2013, 2:00
Kada se promena dogodi kao sto je rotacija ekrana Activity se unistava i kreira se nova verzija. Mozes da override-ujes onRetainNonConfigurationInstance i odatle da vratis svoju sliku (npr kao Bitmap).
A u onCreate da proveravas da li se dogodila promena konfiguracije.

Jednostavnije, na engleskom, evo primera:
http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html

sashar
8.4.2013, 20:02
Resio sam tako sto sam u funkciji onConfigurationChanged proveravao da li je portrait ili landscape i na osnovu toga podesavao margine. E sad se javio drugi problem nevezano za ovo. Posto koristim kameru da nesto uslikam i posaljem preko skripte, javlja se problem da u result activity-u na nekim uredjajima ne vraca nista tj data=null, sto sam donekle resio navodjem URI-a gde ce da snimi ali mi se javlja problem da na uredjaju-u kod koga vraca data-a, sada imam sliku i u dva foldera-a camera i 100andro, pa ne znam kako to da resim....

Ivan452
8.4.2013, 23:44
Nisam radio nikad sa kamerom, tako da ovde ne mogu da ti pomognem.

U krajnjem slucaju predpostavljam da bi mogao explicitno da obrises jednu od te dve slike.

sashar
9.4.2013, 0:16
Standard Intent action that can be sent to have the camera application capture an image and return it.

The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object in the extra field. This is useful for applications that only need a small image. If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of EXTRA_OUTPUT.

Ovde pise da ako ne definisem extra_output mogu samo tu malu sliku da dobijem. E sad to sam i testirao na tabletu, napravio intent bez outputa i on pokrene kameru, kao uslika ali je nigde ne sacuva, isto to na telefonu(xperia arcs) radi skroz drugacije, sacuva sliku u standardnom folderu 100andro :eek: Prvi pokusaj je bio da u bazu upisem url koji cu koristii kao output, i to lepo radi na tabletu, posto je njemu default folder za slike camera, a na telefonu dobijam i folder camera u kojem je ta slika i u 100 andro istu tu sliku..:n-cc2:
Treci pokusaj je da napravim File na kartici i da mi to bude output, pa da ga kada zavrsim obrisem...sto i radi, ali opet ostaje slika na fonu...nisam pametan :icon_scra

Ivan452
9.4.2013, 2:11
Jesi li siguran da imas sve potrebne privilegije definisane u manifestu da bi obrisao fajl (u trecem slucaju)?
Proveri da li je i na tabletu i na telefonu lokacija cuvanja fotografija ista (memorijska kartica ili kartica telefona).

Ajde daj neke snippete koda, kako pozivas kameru i sta potom radis sa povratnom vrednoscu. Trebalo bi da postoji resenje u kojem ne moras da brines o tome gde se cuvaju slike, da li je tablet ili telefon i sl.

sashar
10.4.2013, 0:36
Resio sam na treci nacin..
f= new File(Environment.getExternalStorageDirectory(), "image_001.jpg");
Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(i, 0);

// i ovo

picturePath=f.getAbsolutePath();
Log.v("kamera",picturePath);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize=2;
image=BitmapFactory.decodeFile(picturePath,options );

i ovako na tabletu dobijam na kartici jednu sliku koju koristim, a na fonu imam dve...:to_care: ako mi je za utehu i b92 aplikacija za slanje slika radi isto na ovaj nacin...:D mogu da je obrisem, ali samo ako je folder u kome se nalazi prazan(Deletes this file. Directories must be empty before they will be deleted. ), pa onda moram da ga napraviim folder da bih mogao da obrisem sliku, tako da je necu brisati...::)

Ivan452
10.4.2013, 19:23
Sve aplikacije koje mi padaju na pamet, a koje salju slike, imaju svoj folder u kojem se slike cuvaju.
Cak npr aplikacija KIK, gde ako saljes sliku iz galerije, ona ce napraviti kopiju te slike u svom folderu. Moguce je i WhatsApp da radi isto, nisam siguran.

sashar
11.4.2013, 1:07
Upravo tako, sad sam pogledao za whatsApp, isto postoji folder gde sve cuva. Hvala na odgovorima. :ciao: