Forum » Programiranje » [Android] pomoč pri postavitvi layouta
[Android] pomoč pri postavitvi layouta
icurk ::
Živjo,
Zanime me kako bi najlažje postavil/zgradil layout, kakor ga prikazuje spodnja slika.
Za ozadje aktivnosti imam sliko čez celotni ekran, na sliki so različni elementi (v primeru na sliki: hiša, klop, ribnik, cvetovi drevesa). Moja želja je, da ko kliknem na posamezen element, se izveda neka akcija. Sam sem mislil čez posamezen element postavit gumb, ki je v celoti prosojen in se ga ne vidi. Zanime pa me, kako naj postavim gumb na pravo mesto, če so te elementi razmetani po sliki in ni nekega reda med njimi?
Slika je zgolj simbolična in ne predstavlja sliko dejanske aplikacije
Hvala, LP
Zanime me kako bi najlažje postavil/zgradil layout, kakor ga prikazuje spodnja slika.
Za ozadje aktivnosti imam sliko čez celotni ekran, na sliki so različni elementi (v primeru na sliki: hiša, klop, ribnik, cvetovi drevesa). Moja želja je, da ko kliknem na posamezen element, se izveda neka akcija. Sam sem mislil čez posamezen element postavit gumb, ki je v celoti prosojen in se ga ne vidi. Zanime pa me, kako naj postavim gumb na pravo mesto, če so te elementi razmetani po sliki in ni nekega reda med njimi?
Slika je zgolj simbolična in ne predstavlja sliko dejanske aplikacije
Hvala, LP
Mavrik ::
Namesto da si delaš glavobole z layoutom in uničuješ odzivnost ter hitrost delovanja s prosojnimi viewi, se to dela tako, da narediš svoj view.
1.) Extendaš razred View
2.) V onDraw() poskrbiš da se slika nariše na podani Canvas
3.) V onTouchEvent pogledaš koordinate tapa in sprožiš ustrezno akcijo.
To, da greš za statično sliko probat pozicionirat druge viewe nad elemente je neumno, ker boš imel ogromno težav z različnimi zasloni in velikostjo naprav. Pri custom viewu pa samo preračunaš tap glede na razmerje/velikost canvasa.
1.) Extendaš razred View
2.) V onDraw() poskrbiš da se slika nariše na podani Canvas
3.) V onTouchEvent pogledaš koordinate tapa in sprožiš ustrezno akcijo.
To, da greš za statično sliko probat pozicionirat druge viewe nad elemente je neumno, ker boš imel ogromno težav z različnimi zasloni in velikostjo naprav. Pri custom viewu pa samo preračunaš tap glede na razmerje/velikost canvasa.
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
icurk ::
Trenutno sem uspel nekako narediti tole (uporabil sem framelayout in potem odmike(v dp) na posameznih gumbih).
Sedaj pa sem prišel do drugega problema. Kako narediti te odmike, da bodo na vseh ekranih in različnih resolucijah enaki.
Sedaj pa sem prišel do drugega problema. Kako narediti te odmike, da bodo na vseh ekranih in različnih resolucijah enaki.
Mavrik ::
Trenutno sem uspel nekako narediti tole (uporabil sem framelayout in potem odmike(v dp) na posameznih gumbih).
Sedaj pa sem prišel do drugega problema. Kako narediti te odmike, da bodo na vseh ekranih in različnih resolucijah enaki.
Beri moje sporočilo.
The truth is rarely pure and never simple.
icurk ::
Torej misliš da bi naredil custom view in ga prikazal v aktivnosti? Na kaj se pa potem nanašajo koordinate tapa?
Sem šele na začetku z androidom tako da potrebujem kak podatek/nasvet več :)
Sem šele na začetku z androidom tako da potrebujem kak podatek/nasvet več :)
icurk ::
1.) Extendaš razred View
2.) V onDraw() poskrbiš da se slika nariše na podani Canvas
3.) V onTouchEvent pogledaš koordinate tapa in sprožiš ustrezno akcijo.
Pri custom viewu pa samo preračunaš tap glede na razmerje/velikost canvasa.
A je res potrebno extendat view? Kaj pa če normalno dam sliko za ozadje in potem v aktivnosti preračunavam tape?
Mavrik ::
A je res potrebno extendat view? Kaj pa če normalno dam sliko za ozadje in potem v aktivnosti preračunavam tape?
Zakaj spet iščeš bolj zakomplicirano rešitev namesto da bi dve metodi implementiral?
Če se prav spomnim sta getX() in getY() v koordinatah viewa (e.g. 0,0 je levi zgornji kot viewa), getRawX() in getRawY() pa dasta absolutne zaslonske koordinate.
The truth is rarely pure and never simple.
icurk ::
icurk ::
Zdaj sem se lotil tega po tvojem nasvetu. Sem naredil costum view, kjer sem tudi narisal mojo sliko.
Ter naredil aktivnost in ontouch event:
A si mislil da nekako tako naredim?
Zdej se koordinate klika vedno nanašajo na celotni zaslon in ne na sliko, če je slika čez celotni zaslon ni problemov. Če pa je slika recimo da malo zamaknjena (zaradi različnega razmerja stranic) pa to nebo kul.
torej kako dobim koordinate klikov, ki se nanašajo zgolj na sliko?
public class Background extends View { Bitmap bgImage; public Background(Context context) { super(context); bgImage = BitmapFactory.decodeResource(getResources(), R.drawable.bg); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); bgImage = getResizedBitmap(bgImage, canvas.getHeight()-100, canvas.getWidth()); canvas.drawBitmap(bgImage, 0, canvas.getHeight()/2, null); } public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { int width = bm.getWidth(); int height = bm.getHeight(); float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // CREATE A MATRIX FOR THE MANIPULATION Matrix matrix = new Matrix(); // RESIZE THE BIT MAP matrix.postScale(scaleWidth, scaleHeight); // "RECREATE" THE NEW BITMAP Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); return resizedBitmap; } }
Ter naredil aktivnost in ontouch event:
public class Main extends Activity { Background bg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bg = new Background(this); setContentView(bg); bg.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText( getApplicationContext(), "Touch coordinates : " + String.valueOf(event.getX()) + ":" + String.valueOf(event.getY()), Toast.LENGTH_SHORT).show(); return true; } return false; } }); } }
A si mislil da nekako tako naredim?
Zdej se koordinate klika vedno nanašajo na celotni zaslon in ne na sliko, če je slika čez celotni zaslon ni problemov. Če pa je slika recimo da malo zamaknjena (zaradi različnega razmerja stranic) pa to nebo kul.
torej kako dobim koordinate klikov, ki se nanašajo zgolj na sliko?
icurk ::
No tole mi je sedaj uspelo in mi vse dela tako kot mora.
Sedaj me pa zanima, kako/če se da narediti tako, da se s pritiskom na neko področje tam pojavi neka slika/gumb ter s pritiskom nanj, se mi zažene nova aktivnost? Te slike/gumbi so lahko tudi že vnaprej nekako pozicionirani(glede na razmerje strani, lahko izračunam kje so postavljeni), in se nerabijo nanašat na koordinate klika.
Kako bi lahko to naredil?
Sedaj me pa zanima, kako/če se da narediti tako, da se s pritiskom na neko področje tam pojavi neka slika/gumb ter s pritiskom nanj, se mi zažene nova aktivnost? Te slike/gumbi so lahko tudi že vnaprej nekako pozicionirani(glede na razmerje strani, lahko izračunam kje so postavljeni), in se nerabijo nanašat na koordinate klika.
Kako bi lahko to naredil?
Mavrik ::
Prvič, ful ti priporočam da getResizedBitmap pokličeš samo enkrat, ne na vsak frame izrisa. Bo namreč tvoj app izjemno štekal.
Za drugo vprašanje - pač postavi jih po zaslonu, z RelativeLayout al neki pa daj visibility na invisible. Kje je točno problem?
Za drugo vprašanje - pač postavi jih po zaslonu, z RelativeLayout al neki pa daj visibility na invisible. Kje je točno problem?
The truth is rarely pure and never simple.
icurk ::
1. Kje pa je potem najbolše poklicati getResizedBitmap?
2. To bi že šlo, če nebi morali biti te elementi postavljeni tako natančno. Kar želim narediti je to, da ko kliknem na določeno področje, se mi potem pojavi slika v tem področju na točno določenem mestu(kakor kaže slika spodaj). In ker imajo naprave različne resolucije in razmerje stranic, se potem to rahlo zakomplicira.
Sem si pa zdej vse skupaj zastavil malo drugače. Za moj layout bi uporabil framelayout, v katerega bi dal costumview(kjer narišem ozadje in računam vse potrebno), potem pa bi samo dodajal slike, ki bi jih potem v aktivnosti postavljal s setX in setY. Prej bi pa seveda izračunal kakšna mora biti x in y koordinata. Glede na to, da poznam vse potrebne količine, mislim da mi bi moralo nekako uspeti izračunati...
2. To bi že šlo, če nebi morali biti te elementi postavljeni tako natančno. Kar želim narediti je to, da ko kliknem na določeno področje, se mi potem pojavi slika v tem področju na točno določenem mestu(kakor kaže slika spodaj). In ker imajo naprave različne resolucije in razmerje stranic, se potem to rahlo zakomplicira.
Sem si pa zdej vse skupaj zastavil malo drugače. Za moj layout bi uporabil framelayout, v katerega bi dal costumview(kjer narišem ozadje in računam vse potrebno), potem pa bi samo dodajal slike, ki bi jih potem v aktivnosti postavljal s setX in setY. Prej bi pa seveda izračunal kakšna mora biti x in y koordinata. Glede na to, da poznam vse potrebne količine, mislim da mi bi moralo nekako uspeti izračunati...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android][Java] Povečanje hitrosti algoritmaOddelek: Programiranje | 1163 (744) | Legoless |
» | [Android] SplošnoOddelek: Programiranje | 1995 (1125) | piki12 |
» | Programiranje problem androidOddelek: Programiranje | 1162 (927) | g333kk |
» | Android zamenjava pogledovOddelek: Programiranje | 1065 (886) | c00L3r |
» | android črtaOddelek: Programiranje | 2389 (1660) | g333kk |