Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken
Values versus Pointers Color c; Rect r; class Rect struct Color c 0 0 R G 0 B Left Right 20 Top 40 Bottom c = new Color(255,0,0); new Rect(10,20,30,40); null r r =
Methoden met een resultaat private double kwadraat (double x) { return x*x ; } type van het resultaat waarde van het resultaat in speciale return-opdracht
Methoden met een resultaat nSchrijf methodes omtrek en diagonaal met een Rect als parameter, die dat uitrekenen public int omtrek (Rect r) { } return 2*(br+h); Left Top Right Bottom int br = r.Right-r.Left; int h = r.Bottom-r.Top; br h public double diagonaal(Rect r) { } return Math.Sqrt(a*a + b*b); int a = r.Right-r.Left; int b = r.Bottom-r.Top; a 2 + b 2 = c 2
Cirkel- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawCircle(p.X, p.Y, 50, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); if (p != null)
if-opdracht opdracht wordt alleen uitgevoerd als voorwaarde niet geldt if (temperatuur<0) uitvoer.Text = "Het vriest!”; else uitvoer.Text = "Het dooit."; opdracht wordt alleen uitgevoerd als voorwaarde geldt
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok opdrachtelse
Cirkel- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawBitmap(b, p.X, p.Y, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); if (p != null) met bitmap b = BitmapFactory.DecodeResource (...Icon...); Bitmap b;
Punten- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawBitmap(b, p.X, p.Y, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); foreach( PointF p in alles) met bitmap b = BitmapFactory.DecodeResource (...Icon...); Bitmap b; List alles = new List ( ) ; alles.Add(p);
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok opdrachtelse typeexprinnaamforeach()opdracht
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView : View Bitmap b; canv.DrawBitmap(b, 0, 0, verf); BitmapFactory.Options opties = new BitmapFactory.Options(); opties. InScaled = false; b = BitmapFactory. DecodeResource ( ); c.Resources, Resource. Drawable. UU1024, opties
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View Bitmap b; canv.DrawBitmap(b, 0, 0, verf);
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View Bitmap b; canv.DrawBitmap(b, 0, 0, verf);
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View public void OnSensorChanged(SensorEvent s) { } Bitmap b;float Schaal;float Hoek;, ISensorListener canv.DrawBitmap(b, mat, verf); Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); mat.PostTranslate(-b.Width/2, -b.Height/2); Hoek = s.Values[0]; this.Invalidate( ); SensorManager sm = c. GetSystemService(...); sm.RegisterListener(this,...Orientation... );
Interface nIn de library nIn je eigen programma interface ISensorListener { } public void OnSensorChanged(SensorEvent s); class KompasView : View { } public KompasView(Context c) : base(c) { } public OnDraw(Canvas c) { } public void OnSensorChanged(SensorEvent s) { }, ISensorListener wat is er nodig om een ISensorListener te zijn? deze methode! ik beloof een ISensorListener te zijn en implementeer dus de methode!
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View public void OnSensorChanged(SensorEvent s) { } Bitmap b;float Schaal;float Hoek;, ISensorListener canv.DrawBitmap(b, mat, verf); Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); mat.PostTranslate(-b.Width/2, -b.Height/2); Hoek = s.Values[0]; this.Invalidate( ); SensorManager sm = c. GetSystemService(...); sm.RegisterListener(this,...Orientation... );
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View public void OnSensorChanged(SensorEvent s) { } Bitmap b;float Schaal;float Hoek;, ISensorListener canv.DrawBitmap(b, mat, verf); Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); mat.PostTranslate(-b.Width/2, -b.Height/2); Hoek = s.Values[0]; this.Invalidate( ); SensorManager sm = c. GetSystemService(...); sm.RegisterListener(this,...Orientation... ); is een geldige ISensorListener want zijn klasse heeft deze methode
Gestures pinch nTouch uraak het scherm aan nDrag uverplaats iets nSwipe uveeg weg nPinch uknijp om te verkleinen
pinch- Kompas } { public void RaakAan( object o, TouchEventArgs tea ) { class KompasView : View Bitmap b;float Schaal;float Hoek;, ISensorListener v1=new PointF( tea...GetX(), tea...GetY() ); } v2=new PointF( tea...GetX(1), tea...GetY(1)); if (tea...PointerCount==2) { if (tea...Action==...Pointer2Down) { } float afst = afstand(v1, v2); float start = afstand(s1, s2); float factor = afst / start; this.Schaal = oudeSchaal * factor; this.Invalidate(); PointF v1, v2; PointF s1, s2; s1=v1; s2=v2; float oudeSchaal; oudeSchaal = Schaal; pinch
Gesture-detection pinch nTouch nDrag nSwipe nPinch nRotate nAlles tegelijk n3-vinger beweging niet zo moeilijk iets ingewikkelder erg lastig
Gestures
Gesture-detection pinch nTouch nDrag nSwipe nPinch nRotate nAlles tegelijk n3-vinger beweging njouw innovatieve gesture niet zo moeilijk iets ingewikkelder erg lastig laten herkennen door library toch zelf doen?
Gesture-detection pinch nTouch nDrag nSwipe nPinch nRotate nAlles tegelijk n3-vinger beweging niet zo moeilijk iets ingewikkelder erg lastig laten herkennen door library Hoe?
Kompas met Gesture detector { public void RaakAan(..., TouchEventArgs tea ) { class KompasView : View float Schaal; } this.Schaal = oSchaal * factor; this.Invalidate(); public KompasView(Context c) : base(c) { } this.Touch += RaakAan; public void OnDraw(Canvas canv) {......Schaal ingewikkeld gedoe...
Kompas met Gesture detector { public void RaakAan(..., TouchEventArgs tea ) { class KompasView : View float Schaal;, IOnScaleGestureListener } this.Schaal = oSchaal * factor; this.Invalidate(); public void OnScale(ScaleGestureDetector d) { } this.Schaal = Schaal * d.ScaleFactor; this.Invalidate(); public KompasView(Context c) : base(c) { } this.Touch += RaakAan; det = new ScaleGestureDetector(c, this); ScaleGestureDetector det; public void OnDraw(Canvas canv) {......Schaal ingewikkeld gedoe... det. OnTouchEvent ( tea ); krijgt een seintje als het zover is belooft te kunnen luisteren
SensorManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnSensorChanged(SensorEvent s) { }, ISensorListener this,......SensorType. Orientation... x = s.Values[0]; SensorManager sm =......; sm.RegisterListener (, SensorDelay.Ui ); } Temperature Pressure Light Proximity HeartRate Normal if (s.SensorType.Type==SensorType.Light) Location meet bijna alles Game
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnSensorChanged(SensorEvent s) { }, ISensorListener this,......SensorType. Orientation... x = s.Values[0]; SensorManager sm =......; sm.RegisterListener (, SensorDelay.Ui ); } if (s.SensorType.Type==SensorType.Light) meet GPS-positie
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnSensorChanged(SensorEvent s) { }, ISensorListener this,......SensorType. Orientation... x = s.Values[0]; LocationManager lm =......; lm.RequestLocationUpdates (, SensorDelay.Ui ); } if (s.SensorType.Type==SensorType.Light) meet GPS-positie
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnSensorChanged(SensorEvent s) { }, ISensorListener, this x = s.Values[0]; LocationManager lm =......; lm.RequestLocationUpdates ( ); } if (s.SensorType.Type==SensorType.Light) meet GPS-positie......
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnSensorChanged(SensorEvent s) { }, ILocationListener, this x = s.Values[0]; LocationManager lm =......; lm.RequestLocationUpdates ( ); } if (s.SensorType.Type==SensorType.Light) meet GPS-positie......
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnLocationChanged(Location loc) { }, ILocationListener, this x = s.Values[0]; LocationManager lm =......; lm.RequestLocationUpdates ( ); } meet GPS-positie......
LocationManager } { public MijnView(Context c) : base(c) { class MijnView : View public void OnLocationChanged(Location loc) { }, ILocationListener, this noord = loc.Latitude; oost = loc.Longitude; LocationManager lm =......; lm.RequestLocationUpdates ( ); } meet GPS-positie......
Practicumopgave: Running App
Running App n Knoppen n Statusregel n Kaart ugelopen track upositie met orientatie Brainstorm-idee: drag pinch
Kaartmateriaal CC-BY-4.0 licentie 10MB per blad
Kaartmateriaal op de practicumsite 1km = 400 pixels
Kaartprojectie o Geografisch nRD-kilometergrid public PointF Geo2RD ( PointF geo ) { return rd; } const double fi0 = ; const double lam0 = ; const double x0 = ; const double y0 = ; double fi = geo.X; double lam = geo.Y; double dFi = 0.36 * (fi - fi0); double dLam = 0.36 * (lam - lam0); double dFi2 = dFi * dFi; double dFi3 = dFi2 * dFi; double dLam2 = dLam * dLam; double dLam3 = dLam2 * dLam; double dLam4 = dLam3 * dLam; double x = x * dLam * dFi * dLam * dFi2 * dLam * dLam * dFi * dFi3 * dLam * dFi * dLam * dLam * dFi2 * dLam3; double y = y * dFi * dLam * dFi * dFi * dLam * dFi * dLam * dFi2 * dLam * dFi * dLam * dLam * dFi * dLam4; PointF rd = new PointF((float)x, (float)y); in graden in meters op de practicumsite