Interface In de library In je eigen programma wat is er nodig om een

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 8: Recursie.
Advertisements

Het type int Tekenen met Java operatoren
Hoofdstuk 6: Controle structuren
Hoofdstuk 7 verplicht… Keuze.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Inleiding tot programmeren
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 7 Herhaling Nieuw!. while ( x
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 2 inleveropdrachten) college Tent. 1 Tent. 2 college prakt. 1 prakt. 2 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok.
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Activity Bij het starten van een app:
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
ISensorEventListener
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Schilderij class MijnAct : Activity { MijnView scherm;
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Syntax van opdrachten opdracht naam naam ( expressie ) ; . , expressie
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Game Basics
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Willekeurigheid en Herhaling
Aanroep van een methode voert opdrachten uit in de body daarvan
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Implementatie Zoekboom
Object Communication (Jewel Jam)
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Transcript van de presentatie:

Interface In de library In je eigen programma wat is er nodig om een ISensorEventListener te zijn? In de library In je eigen programma deze methode! interface ISensorEventListener { } public void OnSensorChanged(SensorEvent s); public void OnAccuracyChanged(SensorEvent s); ik beloof een ISensorEventListener te zijn class KompasView : View { , ISensorEventListener public KompasView(Context c) : base(c) { ...... } en implementeer dus de methodes! public OnDraw(Canvas c) { ...... } public void OnSensorChanged(SensorEvent s) { ...... } public void OnAccuracyChanged(SensorEvent s) { } }

ISensorEventListener Kompas class KompasView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; belooft methodes public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource(...UU...); } SensorManager sm = c . GetSystemService(...); sm.RegisterListener(this, ...Orientation...); protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } is een geldige ISensorEventListener Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostTranslate(-b.Width/2, -b.Height/2); want zijn klasse heeft deze methode mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); canv.DrawBitmap(b, mat, verf); public void OnSensorChanged(SensorEvent s) { } Hoek = s.Values[0]; this.Invalidate( ); }

Keuze / Herhaling opdracht wordt alleen uitgevoerd als voorwaarde geldt if (temperatuur<0) uitvoer.Text = "Het vriest!”; else uitvoer.Text = "Het dooit."; opdracht wordt alleen uitgevoerd als voorwaarde niet geldt opdracht wordt steeds opnieuw uitgevoerd zolang voorwaarde geldt while (temperatuur<0) temperatuur += 5;

Herhalen met een teller public void OnDraw (Canvas canvas) { int t; t=0; while ( t<10 ) { canvas.DrawString( ":-)", 0, 20*t, verf ); t = t+1; } teller bepaalt het aantal herhalingen en komt goed van pas in de body

String verveelvoudigen private static string veelwerf (string x, int n) { string result; int t; t = 0; result = ""; while ( t<n ) { t = t+1 ; } result = result + x ; return result; }

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 ?

wordt vermenigvuldigd met Variabelen aanpassen x = x * 2 ; nieuwe waarde wordt oude waarde Afgekorte notaties: wordt vermenigvuldigd met x = x * 2 ; x *= 2 ; wordt vermeerderd met x = x + 5 ; x += 5 ; wordt opgehoogd x = x + 1 ; x += 1 ; x ++ ;

Herhaling met een teller int t ; t = 0; t = 0; for while ( t<x ) for ( t=0 ; t<x ; t++ ) { // doe iets nuttigs // met t t ++ ; t ++ ; }

String verveelvoudigen private static string veelwerf (string x, int n) { string result; int t; t = 0; result = ""; while ( t<n ) { t = t+1 ; } result = result + x ; return result; }

String verveelvoudigen private static string veelwerf (string x, int n) { string result; int t; result = ""; for( t=0; t<n; t++ ) result = result + x ; return result; }

RGB-Kubus 3x RadioButton SeekBar KubusView 5x RadioButton

Kubus class KubusApp : Activity { KubusView kv; SeekBar s; RadioButton r, g, b; public override void OnCreate(Bundle b) { base.Oncreate(b); r = new RadioButton(this); g = new RadioButton(this); b = new RadioButton(this); RadioGroup grp = new RadioGroup(this); grp.AddView(r); grp.AddView(g); grp.AddView(b); r.Click += kies; g.Click += kies; b.Click += kies; kv = new KubusView(this); s = new SeekBar(this); LinearLayout lay = new LinearLayout(this); lay.AddView(grp); lay.AddView(s); lay.AddView(kv); s.ProgressChanged+=pc; SetContentView( kv ); lay } }

Kubus class KubusApp : Activity { KubusView kv; SeekBar s; RadioButton r, g, b; public override void OnCreate(Bundle b) { base.Oncreate(b); ... ... ... r.Click += kies; g.Click += kies; b.Click += kies; s.ProgressChanged+=pc; } public void kies(object o, EventArgs ea) { if (o==r) kv.Dim = 0; if (o==g) kv.Dim = 1; if (o==b) kv.Dim = 2; kv.Invalidate(); } public void pc(object o, EventArgs ea) { kv.Pos = s.Progress; kv.Invalidate(); } }

Kubus class KubusView: View { public int Pos=0, Dim=2; public KubusView(Context c) : base(c) { } protected override void OnDraw(Canvas canv) { base.OnDraw(canv); Paint verf = new Paint(); int a = 16; float v = 255/(a-1); int d = Math.Min(Width, Height) / a; for (int x=0; x<a; x++) { for (int y=0; y<a; y++) { if (Dim==2) verf.Color = new Color( v*x, v*y, Pos); canv.DrawRect ( d*x, d*y, d*(x+1), d*(y+1), verf); } } } }

Voorbeeld: Rente- berekening door de gebruiker in te vullen EditText -objecten Button met een Click handler TextView met het resultaat

Resource designer class RenteApp: Activity { EditText bedragBox; <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:p1= "http://schemas.android.com/apk/res/android" p1:orientation="vertical" p1:layout_width="match_parent" p1:layout_height="match_parent" p1:id="@+id/linearLayout1"> <TextView p1:text="Bedrag" p1:textAppearance="?android:attr/ textAppearanceMedium" p1:layout_height="wrap_content" p1:id="@+id/textView1" /> <EditText p1:inputType="numberDecimal" p1:id="@+id/bedragBox" /> </LinearLayout> EditText bedragBox; override void OnCreate(...) { SetContentView (Resource.Layout.Main); bedragBox = FindViewById<EditText> (Resource.Id.bedragBox); } }

Rente-programma private void bereken(object o, EventArgs ea) { double bedrag = double.Parse( bedragBox.Text ) ; double rente = double.Parse( renteBox.Text ); resultaat.Text = ""; for (int jaar=0; jaar<=10; jaar++) { resultaat.Text += $"na {jaar} jaar: {bedrag}\n"; bedrag *= (1+0.01*rente); } }

Running App Onderdelen: Knoppen Statusregel Kaart gelopen track positie met orientatie drag pinch

pinch-Kompas pinch class KompasView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; PointF v1, v2; PointF s1, s2; float oudeSchaal; public void RaakAan( object o , TouchEventArgs tea ) { v1=new PointF( tea...GetX(), tea...GetY() ); if (tea...PointerCount==2) { v2=new PointF( tea...GetX(1), tea...GetY(1)); if (tea...Action==...Pointer2Down) { } s1=v1; s2=v2; oudeSchaal = Schaal; pinch float afst = afstand(v1, v2); float start = afstand(s1, s2); float factor = afst / start; this.Schaal = oudeSchaal * factor; this.Invalidate(); } }

pinch-Kaart pinch drag else if (!pinching) ... else ... class KaartView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; bool pinching = false; PointF v1, v2; PointF s1, s2; float oudeSchaal; public void RaakAan( object o , TouchEventArgs tea ) { v1=new PointF( tea...GetX(), tea...GetY() ); if (tea...PointerCount==2) { v2=new PointF( tea...GetX(1), tea...GetY(1)); if (tea...Action==...Pointer2Down) { } s1=v1; s2=v2; oudeSchaal = Schaal; pinch pinching = true; float afst = afstand(v1, v2); drag float start = afstand(s1, s2); float factor = afst / start; this.Schaal = oudeSchaal * factor; this.Invalidate(); } else if (!pinching) ... else ... }

Kompas met Gesture detector class KompasView : View { float Schaal; public KompasView(Context c) : base(c) { ...... } this.Touch += RaakAan; public void RaakAan( ... , TouchEventArgs tea ) { ...ingewikkeld gedoe... this.Schaal = oudeSchaal * factor; this.Invalidate(); } public void OnDraw(Canvas canv) { ......Schaal......

Kompas met Gesture detector class KompasView : View , IOnScaleGestureListener , IOnGestureListener { float Schaal; belooft te kunnen luisteren ScaleGestureDetector det; public KompasView(Context c) : base(c) { ...... } krijgt een seintje als het zover is this.Touch += RaakAan; det = new ScaleGestureDetector(c, this); det2 = new GestureDetector(c, this); public void RaakAan( ... , TouchEventArgs tea ) { det . OnTouchEvent ( tea ); ...ingewikkeld gedoe... this.Schaal = oSchaal * factor; this.Invalidate(); } public void OnScale(ScaleGestureDetector d) { this.Schaal = this.Schaal * d.ScaleFactor; this.Invalidate(); } public void OnDraw(Canvas canv) { ......Schaal......

pixel van het plaatje dat in het midden moet komen Kompas class KompasView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource(...UU...); } pixel van het plaatje dat in het midden moet komen SensorManager sm = c . GetSystemService(...); sm.RegisterListener(this, ...Orientation...); protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostTranslate(-b.Width/2, -b.Height/2); mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); canv.DrawBitmap(b, mat, verf); public void OnSensorChanged(SensorEvent s) { } Hoek = s.Values[0]; this.Invalidate( ); }

Kaart PointF centrum = new PointF(138300, 454300); midx = (centrum.X – 136000) * 0.4; 1km = 400 pixels 2300 meter 920 pixels 138300 meter

Kaart PointF centrum = new PointF(138300, 454300); midx = (centrum.X – 136000) * 0.4; midy = – (centrum.Y – 458000) * 0.4; 1480 pixels 1km = 400 pixels 1300 m 454300 meter

pixel van het plaatje dat in het midden moet komen Kompas class KompasView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; pixel van het plaatje dat in het midden moet komen protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostTranslate(–b.Width/2, –b.Height/2); mat.PostRotate(– Hoek); mat.PostTranslate(Width/2, Height/2); canv.DrawBitmap(b, mat, verf); }

pixel van het plaatje dat in het midden moet komen Kaart class KaartView : View , ISensorEventListener { Bitmap b; float Schaal; float Hoek; pixel van het plaatje dat in het midden moet komen protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostTranslate(–midx, –midy); mat.PostTranslate(Width/2, Height/2); canv.DrawBitmap(b, mat, verf); }

Coordinaten geografische coordinaten (graden) RD-projectie coordinaten (meters) bitmap (pixels) scherm (geschaalde pixels) geo2rd * 0.4 * schaal rd2geo / 0.4 / schaal

Huidige positie tekenen PointF huidig; // in meters! public void OnLocationChanged(Location loc) { } huidig = geo2rd(loc); this.Invalidate(); geo2rd * 0.4 * schaal

Huidige positie tekenen PointF huidig; // in meters! public void OnDraw(Canvas c) { float ax = huidig.X – centrum.X; float px = ax * 0.4f; float sx = px * Schaal; float x = this.Width/2+sx; c.DrawCircle(x, ...); geo2rd * 0.4 * schaal bereken de afstand tot het centrum in pixels... op het scherm...

Draggen PointF dragstartpunt; // in schermpixels! public void RaakAan(..., TouchEventArgs tea) { float x = tea.Event.GetX(); float sx = x – dragstartpunt.X; float px = sx / Schaal; float ax = px / 0.4; centrum.X –= ax; in meters... in pixels... op het scherm... rd2geo / 0.4 / schaal

Vrijdag werkcollege! 201 / 209 / 161 001 / 209 / 214 001 / 161 / 209