Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdJonas Bogaert Laatst gewijzigd meer dan 6 jaar geleden
1
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) { } }
2
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( ); }
3
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;
4
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
5
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; }
6
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 ?
7
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 ++ ;
8
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 ++ ; }
9
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; }
10
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; }
11
RGB-Kubus 3x RadioButton SeekBar KubusView 5x RadioButton
12
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 } }
13
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(); } }
14
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); } } } }
15
Voorbeeld: Rente- berekening
door de gebruiker in te vullen EditText -objecten Button met een Click handler TextView met het resultaat
16
Resource designer class RenteApp: Activity { EditText bedragBox;
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:p1= " p1:orientation="vertical" p1:layout_width="match_parent" p1:layout_height="match_parent" <TextView p1:text="Bedrag" p1:textAppearance="?android:attr/ textAppearanceMedium" p1:layout_height="wrap_content" /> <EditText p1:inputType="numberDecimal" /> </LinearLayout> EditText bedragBox; override void OnCreate(...) { SetContentView (Resource.Layout.Main); bedragBox = FindViewById<EditText> (Resource.Id.bedragBox); } }
17
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); } }
18
Running App Onderdelen: Knoppen Statusregel Kaart gelopen track
positie met orientatie drag pinch
19
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(); } }
20
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 ... }
21
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......
22
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......
23
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( ); }
24
Kaart PointF centrum = new PointF(138300, 454300);
midx = (centrum.X – ) * 0.4; 1km = 400 pixels 2300 meter 920 pixels meter
25
Kaart PointF centrum = new PointF(138300, 454300);
midx = (centrum.X – ) * 0.4; midy = – (centrum.Y – ) * 0.4; 1480 pixels 1km = 400 pixels 1300 m meter
26
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); }
27
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); }
28
Coordinaten geografische coordinaten (graden) RD-projectie coordinaten
(meters) bitmap (pixels) scherm (geschaalde pixels) geo2rd * 0.4 * schaal rd2geo / 0.4 / schaal
29
Huidige positie tekenen
PointF huidig; // in meters! public void OnLocationChanged(Location loc) { } huidig = geo2rd(loc); this.Invalidate(); geo2rd * 0.4 * schaal
30
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...
31
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
32
Vrijdag werkcollege! 201 / 209 / 161 001 / 209 / 214 001 / 161 / 209
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.