Activity Bij het starten van een app: Operating system maakt een Activity -object aan en neemt dat onderhanden met de methode OnCreate( ) Klasse uit library Android.App Methode uit klasse Activity
Maak je eigen View protected override void OnCreate(Bundle b) { base.oncreate(b); TextView t; t = new TextView(this); this.setcontentview(t); AnalogClock a; a = new AnalogClock(this); this.setcontentview(a); bestaat nog niet MondiaanView m; m = new MondriaanView(this); this.setcontentview(m);
Maak je eigen View public class MondriaanView : View { public MondriaanView(Context ct) : base(ct) { base.view(ct); this.setbackgroundcolor(color.white); protected override void OnDraw(Canvas cv) { base.ondraw(cv); cv. DrawLine( ); cv. DrawRect( ); cv. DrawCircle(.);
(0,0) x y DrawText (x,y) Hallo (x1,y1) DrawLine boven links (x,y) (x2,y2) DrawRect onder DrawBitmap rechts DrawOval DrawCircle (x,y) r
Tekenen compositie met blauw en rood (vrij naar Piet Mondriaan) Paint verf; verf = new Paint(); verf.color=color.black; cv.drawrect( 10, 0, 20, 100, verf ); cv.drawrect( 50, 0, 60, 100, verf ); cv.drawrect( 90, 0, 100, 100, verf ); cv.drawrect( 0, 40, 200, 50, verf ); cv.drawrect( 0, 70, 200, 80, verf ); verf.color = Color.Blue; cv.drawrect( 0, 50, 10, 70, verf ); verf.color = Color.Red; cv.drawrect(100, 0, 200, 40, verf );
Variabelen x1 x2 x3 int balk, breed, hoog int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; balk = 10; breed = 200; hoog = 100; y1 y2 Paint verf; verf = new Paint(); verf.color=color.black; cv.drawrect( x1, 0, x1+balk, hoog, verf ); cv.drawrect( x2, 0, x2+balk, hoog, verf ); cv.drawrect( x3, 0, x3+balk, hoog, verf ); cv.drawrect( 0, y1, breed, y1+balk, verf ); cv.drawrect( 0, y2, breed, y2+balk, verf ); verf.color = Color.Blue; cv.drawrect( 0, y1+balk, x1, y2, verf ); verf.color = Color.Red; cv.drawrect(x3+balk, 0, breed, y1, verf );
Makkelijk aanpasbaar?
Syntax van declaratie declaratie const type var naam = expressie, ; type klasse naam int string
Syntax van expressies expressie getal symbool variabele expressie operator expressie ( expressie )
Gebruik van expressies in opdrachten opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ;
Gebruik van expressies in opdrachten opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ;
Gebruik van expressies in opdrachten en expressies opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ; expressie constante variabele expressie operator expressie ( expressie )
Hoofdstuk 4.6-7 Maak je eigen methodedefinities
Voorbeeld: Huizen
Nieuwe methoden Methode: groepje opdrachten met een naam Aanroep van een methode voert opdrachten uit in de body daarvan private void tekenhuis( ) {. DrawRect ( );. DrawLine ( );. DrawLine ( ); protected override void OnDraw(Canvas c) {. tekenhuis ( );. tekenhuis ( );. tekenhuis ( );
Parameters private void tekenhuis ( ) (Canvas c, ) { c. DrawRect ( ); c. DrawLine ( ); c. DrawLine ( ); parameter declareren protected override void OnDraw(Canvas c) {. tekenhuis (c, ( ); );. tekenhuis (c, ( ); );. tekenhuis (c, ( ); ); en bij aanroep meegeven
Het object this class HuizenView : View { private void tekenhuis (Canvas c, ) { c. DrawRect ( ); c. DrawLine ( ); c. DrawLine ( ); protected override void OnDraw(Canvas c) { this. tekenhuis (c, ); this. tekenhuis (c, ); this. tekenhuis (c, ); this: het object dat OnDraw ook al onder handen heeft
Meer parameters teken driemaal een net iets ander huis protected override void OnDraw(Canvas c) { this. tekenhuis (c, ); 20, 100, 40); this. tekenhuis (c, ); 70, 100, 40); this. tekenhuis (c, ); 120, 100, 60); nog meer parameters!
Meer parameters private void tekenhuis (Canvas c, int ) x, int y, int br) { Paint verf = new Paint(); int tx = x+br/2; int ty = y br br/2; c.drawrect ( x, y-br, x+br, y, verf); c.drawline ( x, y-br, tx, ty, verf); c.drawline ( tx, ty, x+br, y-br, verf); (x,y) br (tx,ty) protected override void OnDraw(Canvas c) { this. tekenhuis (c, ); 20, 100, 40); this. tekenhuis (c, ); 70, 100, 40); this. tekenhuis (c, ); 120, 100, 60);
Flexibiliteit Hoe meer parameters, des te flexibeler de methode private void tekenhuis (Graphics gr, int x, int y, int br, int h, int dakh, Color kl, Color dakkl, ) { en des te lastiger aan te roepen... (x,y) br dakh h
Flexibiliteit Veel parameters: Nu lastig om te programmeren In de toekomst gemakkelijk uit te breiden Weinig parameters: Nu gemakkelijk om te programmeren In de toekomst lastig te onderhouden
Communicatie met methoden Parameters : aanroeper geeft waarde door aan de methode Methode-resultaat : methode geeft waarde terug aan de aanroeper net zoals een wiskundige functie
Methoden met een resultaat type van het resultaat private int kwadraat (int x) { return x*x ; waarde van het resultaat in speciale return-opdracht
Publieksvraag Schrijf een methode driewerf met een String-parameter, die 3 herhalingen ervan oplevert this.driewerf("hoera!") "Hoera!Hoera!Hoera!" private string driewerf (string x) { return x+x+x;
Aanroep van methoden Aanroep van void-methode geldt als opdracht zonder resultaat c.drawline(10,10, 20,20, verf) ; Aanroep van methode met resultaat geldt als expressie a = this.kwadraat (5) ; c.drawline(this.kwadraat (5), 10, 25, 50, verf); this.kwadraat (5) + 1
Syntax van opdrachten opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ; return expressie ;
Hoofdstuk 5.1-2 Variabelen en objecten
Variabelen Variabele: geheugenplaats met een naam Declaratie: aangifte van het type van de variabele int x, y; Toekenningsopdracht: variabele krijgt waarde x = 20; x y 20
Toekenningsopdrachten int x, y; x = 20 ; Expressie aan de rechterkant mag andere variabelen gebruiken x y 20 50 25 26 y = x + 5 ; Vorige waarde gaat verloren x = y * 2 ; y = y + 1 ;
Declaratie en toekenningen Eén keer declarareren int x; = 100; Mogelijk meerdere toekenningen x = 100; x = 250; x = x + 1; x = 2 * x; Declaratie en eerste toekenning
Type van variabelen int x; float y; int float geheel getal x y 103 3.141592 3.333333 10.0 getal met drijvende komma x = 10 ; y = 3.141592f ; y = 10 ; x = x / 3 ; y = y / 3 ;
Standaardtypes gehele getallen 1 byte 2 bytes 4 bytes 8 bytes sbyte short int long ± 127 ± 32767 ± 2 miljard ±10 18 byte ushort uint ulong 0..255 0..65535 0..4 miljard 0..10 19 4 bytes met een decimale punt float 8 bytes double 16 bytes decimal 7 cijfers, afgerond, 10 38 15 cijfers, afgerond, 10 300 28 cijfers, exact, 10 28 2 8-1 2 16-1 2 32-1 2 64-1
Constanten geheel getal (kleinst passende) 0 137 25 met een decimale punt 0.5 273.15 6.02E23 1E3 hexadecimaal 0x1A 0xFF 26 255 3E 11 string 602000000000000000000000 1000 0.00000000003 "Hallo!" "A" "" "een \"citaat\"" "\n" "\\"
Objecten Object: groepje variabelen dat bij elkaar hoort r g b 255 255 0 w h 100 20 Left Top 10 30 Right 20 Bottom 40
Programma en Geheugen opdrachten zijn gegroepeerd in veranderen variabelen zijn gegroepeerd in methoden zijn gegroepeerd in bewerken objecten hebben als type klasse klasse klasse
Objecten Object: groepje variabelen dat bij elkaar hoort r 255 g 255 b 0 Color w 100 h 20 Size Left Top 10 30 Right 20 Bottom Rect 40 aantal prijs 3 199.95 Artikel
Syntax van declaratie declaratie const type var naam = expressie, ; type klasse naam int float string
Publieksvraag Schrijf methodes omtrek en diagonaal met een Rect als parameter, die dat uitrekenen public int omtrek (Rect r) { int br = r.right-r.left; int h = r.bottom-r.top; return 2*(br+h); Top h Left br Right Bottom public double diagonaal(rect r) { int a = r.right-r.left; int b = r.bottom-r.top; a 2 + b 2 = c 2 return Math.Sqrt(a*a + b*b);
Hoofdstuk 6.1 Touch
Klikker class MijnAct : Activity { Button knop; protected override void OnCreate(Bundle b) { base.oncreate(b); knop = new Button(this); knop.click += klik; this.setcontentview(knop); public void klik(object o, EventArgs ea) { knop.text = "1x geklikt";
Klikker class MijnAct : Activity { MijnView scherm; Schilderij protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); knop.click += klik; this.setcontentview(scherm); public void klik(object o, EventArgs ea) { knop.text = "1x geklikt";
class MijnAct : Activity { MijnView scherm; Schilderij protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); scherm.click += klik; this.setcontentview(scherm); class MijnView : View { public MijnView(Context c) : base(c) { protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...);
A-Touch class MijnAct : Activity { MijnView scherm; protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); scherm.touch += raakaan; this.setcontentview(scherm); public void raakaan(object o, EventArgs ea) { class MijnView : View { public MijnView(Context c) : base(c) { protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...);
A-Touch class MijnAct : Activity { MijnView scherm; V-Touch protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); scherm.touch += raakaan; this.setcontentview(scherm); public void raakaan(object o, EventArgs ea) { class MijnView : View { public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...); public void raakaan(object o, EventArgs ea) {
class MijnAct : Activity { MijnView scherm; V-Touch protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); this.setcontentview(scherm); class MijnView : View { public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...); public void raakaan(object o, EventArgs ea) {
class MijnAct : Activity { MijnView scherm; V-Touch protected override void OnCreate(Bundle b) { base.oncreate(b); scherm = new MijnView(this); this.setcontentview(new MijnView(this)); class MijnView : View { public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...); public void raakaan(object o, EventArgs ea) {
Cirkelklikker class MijnAct : Activity { protected override void OnCreate(Bundle b) { base.oncreate(b); this.setcontentview(new MijnView(this)); class MijnView : View { public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawline(...); public void raakaan(object o, EventArgs ea) {
Cirkelklikker class MijnView : View { PointF p; float x, y; public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawcircle(x, y, 50, new Paint()); public void raakaan(object o, TouchEventArgs tea) { x = tea.event.getx(); y = tea.event.gety(); this.invalidate();
Cirkelklikker class MijnView : View { PointF p; public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); c.drawcircle(x, y, 50, new Paint()); public void raakaan(object o, TouchEventArgs tea) { float x, y; x = tea.event.getx(); y = tea.event.gety(); p = new PointF(x, y); this.invalidate();
Cirkelklikker class MijnView : View { PointF p; public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); if (p null) c.drawcircle(p.x, p.y, 50, new Paint()); public void raakaan(object o, TouchEventArgs tea) { float x, y; x = tea.event.getx(); y = tea.event.gety(); p = new PointF(x, y); this.invalidate();
Cirkelklikker class MijnView : View { PointF p; public MijnView(Context c) : base(c) { this.touch += raakaan; protected override void OnDraw(Canvas c) { base.ondraw(c); if (p!= null) c.drawcircle(p.x, p.y, 50, new Paint()); public void raakaan(object o, TouchEventArgs tea) { float x, y; x = tea.event.getx(); y = tea.event.gety(); p = new PointF(x, y); this.invalidate();
Opdrachten voorwaardelijk uitvoeren if (temperatuur<0) uitvoer.text = "Het vriest!"; opdracht wordt alleen uitgevoerd als voorwaarde geldt while (temperatuur<0) temperatuur += 5; opdracht wordt steeds opnieuw uitgevoerd zolang voorwaarde geldt
Twee alternatieven if (temperatuur<0) uitvoer.text = "Het vriest! ; else uitvoer.text = "Het dooit."; opdracht wordt alleen uitgevoerd als voorwaarde niet geldt
Meer opdrachten als body if (temperatuur<0) { uitvoer1.text = "Het vriest"; uitvoer2.text = "Koud he!"; accolades maken twee opdrachten tot één body
Vergelijk-operatoren < <= > >= ==!= kleiner dan kleiner dan of gelijk aan groter dan groter dan of gelijk aan gelijk aan ongelijk aan x=5 x wordt 5! x==5 is x gelijk aan 5?