Schilderij class MijnAct : Activity { MijnView scherm; 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(...); }
Cirkel- klikker } 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(); }
Punten- klikker met bitmap } class MijnView : View { PointF p; Bitmap b; List<PointF> alles ; public MijnView(Context c) : base(c) { this.Touch += raakAan; } met bitmap b = BitmapFactory.DecodeResource(...Icon...); protected override void OnDraw(Canvas c) { base.OnDraw(c); } if (p != null) c.DrawBitmap(b, p.X, p.Y, 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(); }
Punten- klikker met bitmap } class MijnView : View { Bitmap b; List<PointF> alles ; public MijnView(Context c) : base(c) { this.Touch += raakAan; } met bitmap b = BitmapFactory.DecodeResource(...Icon...); protected override void OnDraw(Canvas c) { base.OnDraw(c); } if (p != null) c.DrawBitmap(b, p.X, p.Y, new Paint()); public void raakAan(object o, TouchEventArgs tea) { } float x, y; PointF p; x = tea.Event.GetX(); y = tea.Event.GetY(); p = new PointF(x, y); alles.Add(p); this.Invalidate(); }
Punten- klikker met bitmap } class MijnView : View { Bitmap b; List<PointF> alles ; public MijnView(Context c) : base(c) { this.Touch += raakAan; } met bitmap b = BitmapFactory.DecodeResource(...Icon...); protected override void OnDraw(Canvas c) { base.OnDraw(c); } foreach( PointF p in alles) c.DrawBitmap(b, p.X, p.Y, new Paint()); public void raakAan(object o, TouchEventArgs tea) { } float x, y; PointF p; x = tea.Event.GetX(); y = tea.Event.GetY(); p = new PointF(x, y); alles.Add(p); this.Invalidate(); }
Punten- klikker met bitmap } class MijnView : View { Bitmap b; List<PointF> alles = new List<PointF>( ) ; public MijnView(Context c) : base(c) { this.Touch += raakAan; } met bitmap b = BitmapFactory.DecodeResource(...Icon...); protected override void OnDraw(Canvas c) { base.OnDraw(c); } foreach( PointF p in alles) c.DrawBitmap(b, p.X, p.Y, new Paint()); public void raakAan(object o, TouchEventArgs tea) { } float x, y; PointF p; x = tea.Event.GetX(); y = tea.Event.GetY(); p = new PointF(x, y); alles.Add(p); this.Invalidate(); }
Kompas class KompasView : View , ISensorListener { Bitmap b; float Schaal; float Hoek; 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); } 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( ); }
Interface In de library In je eigen programma wat is er nodig om een ISensorListener te zijn? In de library In je eigen programma deze methode! interface ISensorListener { } public void OnSensorChanged(SensorEvent s); ik beloof een ISensorListener te zijn class KompasView : View { , ISensorListener public KompasView(Context c) : base(c) { ...... } en implementeer dus de methode! public OnDraw(Canvas c) { ...... } public void OnSensorChanged(SensorEvent s) { ...... } }
Machtsverhef-methode private static double macht (double x, int n) { double result; int t; t = 0; result = 1; while ( t<n ) { t = t+1 ; } result = result * x ; return result; }
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 ++ ; }
Machtsverhef-methode private static double macht (double x, int n) { double result; int t; result = 1; for(t=0; t<n ; t++) result = result * x ; return result; }
RGB-Kubus 3x RadioButton SeekBar KubusView 5x RadioButton
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
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); } }
opdracht blok return expressie ; if ( expressie ) opdracht else opdracht while ( expressie ) opdracht for ( expr ; expr ; expr ) opdracht , , declaratie foreach ( type naam in expr ) opdracht var try blok catch ( type naam ) blok
Onbedoelde oneindigheid x=1; aantal = 0; while (aantal<10) x = x*2; aantal = aantal+1; accolades vergeten... { }
Onbedoelde oneindigheid Puntkomma teveel… for (x=0; totaal<100; x++) ; totaal = totaal + x ; ;
Values versus Pointers Color c; struct Color c = new Color(255,0,0); Rect r; class Rect r = new Rect(10,20,30,40); r null c R 255 Left 10 G Top 30 B Right 20 Bottom 40
Eigen klasse Kleur class Kleur { public byte Rood, Groen, Blauw; } constructor-methode public Kleur( ) { } Rood=255; Groen=255; Blauw=255; constructor-methode met parameters public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b; nog een constructor-methode public Kleur( byte x) { } Rood=x; Groen=x; Blauw=x; methode die iets uitrekent public byte Grijswaarde( ) { } return (3*Rood + 6*Groen + Blauw) / 10; }
Methodes in de eigen klasse Kleur elke klasse is automatisch subklasse van object class Kleur : object { public byte Rood, Groen, Blauw; methode die iets uitrekent public byte Grijswaarde( ) { } return (3*Rood + 6*Groen + Blauw) / 10; (byte) (0.3*Rood + 0.6*Groen + 0.1*Blauw); public void MaakDonkerder( ) { } void-methode die het object verandert Rood = (byte) (Rood * 0.9) ; Groen = (byte) (Groen * 0.9) ; Blauw = (byte) (Blauw * 0.9) ; Rood = Rood * 0.9; Groen = Groen * 0.9; Blauw = Blauw * 0.9; de variabelen van methode die een leesbare versie van de Kleur maakt override public string ToString( ) { } return $"{Rood} {Groen} {Blauw}"; }
Meer constructormethodes in klasse Kleur class Kleur { public byte Rood, Groen, Blauw; constructor-methode met parameters public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b; constructor-methode die een kopie maakt public Kleur( Kleur orig ) { } Rood=orig.Rood; Groen=orig.Groen; Blauw=orig.Blauw; constructor-methode die een string ontleedt public Kleur( string s ) { } string[ ] woorden = s.Split( ); array van strings handige methode van string Rood = byte.Parse( woorden[0] ); Groen = byte.Parse( woorden[1] ); Blauw = byte.Parse( woorden[2] ); Rood = woorden[0]; Groen = woorden[1]; Blauw = woorden[2]; }
Intent: Hallo opstarten public class Multi : Activity { public class Hallo : Activity { Button b1, b2, b3, b4, b5, b6; override void OnCreate(Bundle b) { base.OnCreate(b); public void klik1 (object o, EventArgs e) { TextView t = new TextView(this); Intent i; string s = Intent.GetStringExtra("wat"); i = new Intent (this, typeof(Hallo) ); t.Text = s; i.PutExtra("wat", "Hallo!!!"); SetContentView(t); } StartActivity(i); } } }
string versus char string char klasse primitief type object-verwijzing directe waarde nul, een of meer… precies één symbool "" "A" "hello" 'A' operatoren, methoden properties, indexer operatoren == , + == , + , <= Substring, ToUpper, Split Length s[t]
Tel symbool-frequentie public static int Freq(char x, string s) { int aantal; aantal = 0; for (int t=0; t<s.Length; t++) if ( ) aantal++; s[t]==x return aantal; }
Tel symbool-frequentie public static int Freq(char x, string s) { int aantal; aantal = 0; foreach ( char c in s ) for (int t=0; t<s.Length; t++) if ( ) aantal++; s[t]==x c == x return aantal; }
Tekst Analyse 26 9 5 1 14 6 8 public class DiagramView: View { public string Invoer; protected override void OnDraw(Canvas cv) { base.OnDraw(cv); tellers 9 5 1 14 2 3 4 26 Length 6 8 7 int [ ] tellers; tellers = new int [26]; } }
Tekst Analyse 26 9 5 1 14 6 8 public class DiagramView: View { public string Invoer; protected override void OnDraw(Canvas cv) { base.OnDraw(cv); tellers 9 5 1 14 2 3 4 26 Length 6 8 7 int [ ] tellers; tellers = new int [26]; foreach(char c in Invoer) if (c>='a' && c<='z') tellers[ ]++; c-'a' int w = Width / max; int h = Height/ 26; , y=0; foreach(int a in tellers) { cv.DrawText( a.ToString()...); cv.DrawRect( x, y, x+a*w, y+h, verf ); y = y+h; } } }
Gelijkheid van Strings static bool Gelijk( string s, string t) { int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { char c = s[i]; char d= t[i]; if (c!=d) return false; } return m==n; }
Gelijkheid van Strings class String { static bool Equals( string s, string t) { int m = s.Length; this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { char c = s[i]; this[i]; char d= t[i]; if (c!=d) return false; } return m==n; } }
ListView public class KleurenApp : Activity { ListView kleurLijst; ArrayAdapter<string> kleurAdp; string[] kleuren = {"rood", "wit", "blauw"}; protected override void OnCreate(Bundle b) { base.OnCreate(b); kleurLijst = new ListView(this); kleurAdp = new ArrayAdapter<string> (this, SimpleListItemChecked, kleuren); kleurLijst.Adapter = kleurAdp; kleurLijst.Choicemode = Multiple; kleurLijst.ItemClick += klik; SetContentView(kleurLijst); } public void klik(object o, ItemClickEventArgs e) { string s = kleuren[e.Position]; Toast.MakeText(...t...) . Show( ); } }
ListView public class KleurenApp : Activity { public void klik(object o, EventArgs e) { Intent i = new Intent(this, typeof(KleurEdit)); StartActivityForResult( i, 9999 ); } public void iklik(object o, ItemClickEventArgs e) { Intent i = new Intent(this, typeof(KleurEdit)); int pos = e.Position; KleurItem item = kleurItems[pos]; i.PutExtra("naam", item.Naam ); i.PutExtra("kleur", item.Kleur.ToArgb() ); StartActivityForResult( i, pos ); } override void OnActivityResult(int pos, ... ) { ... } }
Waarom methodes? private void einde( object o, EventArgs ea) { this.Finish( ); } een keer definiëren protected override void OnCreate(Bundle b) { Button b = new Button( ); b.Click += einde; (object o, EventArgs ea) => { this.Finish( ) ; } ;
type kan automatisch bepaald worden Waarom methodes? private void einde( object o, EventArgs ea) { this.Finish( ); } protected override void OnCreate(Bundle b) { Button b = new Button( ); b.Click += einde; type kan automatisch bepaald worden (object o, EventArgs ea) => { this.Finish( ) ; } ; body met één opdracht mag zonder accolades
Database SQLite using SQLite; SQLiteConnection db; string filenaam = "test.db"; class KleurItem db = new SQLiteConnection( filenaam ); { [PrimaryKey, AutoIncrement] db.CreateTable ( ); <KleurItem> ( ); public int Id ; {get;set;} KleurItem k = new KleurItem("rood", Color.Red); public string Naam ; {get;set;} db.Insert( k ); public Color Kleur ; var query = db.Table<KleurItem>( ); public int R ; {get;set;} foreach (KleurItem k in query) doeIetsLeuksMet( k ); public int G ; {get;set;} public int B ; {get;set;} k.Naam = "Bordeauxrood"; db.Update( k ); KleurItem(string s, Color c) { Naam=s; R=c.R; G=c.G; B=c.B; } k.Id = 42; db.Delete( k ); }