De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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

Verwante presentaties


Presentatie over: "Interface In de library In je eigen programma wat is er nodig om een"— Transcript van de presentatie:

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


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

Verwante presentaties


Ads door Google