Barbaric Chicken
- Forum-Beiträge: 66
11.11.2013, 16:19:11 via Website
11.11.2013 16:19:11 via Website
Hallo,
kurzes seltsames Problem bei dem ich einfach auf dem Schlauch stehe im Moment obwohl ich so etwas schon zig male genau so gemacht habe (Dachte ich zumindest xD)
Und zwar:
Eine CustomView soll einfach einen blauen Kreis zeichnen (der nachher dann mit dem Finger verschoben werden soll).
Von diesen Kreisen soll es dann 2 Stück geben.
Adde ich nun diesen Kreis zu meinem RelativeLayout und überschreibe nicht die onMeasure Methode in der View, dann wird der Kreis angezeigt und alles funktioniert. Problem hier ist nur: Die View nimmt dann den ganzen Bildschirm als Größe ein, was bedeutet das nachher nicht mehr der 2. Kreis angewählt werden kann weil der 1. ja über allem drüber liegt (oder umgekehrt). Weiterhin ist es auch unnötig das für 48 pixel der ganze Bildschirm eingenommen wird.
Also wollte ich das eben nur diese 48px eingenommen werden.
Habe also die onMeasure Methode wie folgt überschrieben:
Und beim initialisieren der Kreise tue ich folgendes:
Konstruktor und onDraw von Edge ist übrigens:
Und nun, wird nichts mehr angezeigt. Weiß jemand woran das liegt?
Vielen Dank schon mal.
Viele Grüße
kurzes seltsames Problem bei dem ich einfach auf dem Schlauch stehe im Moment obwohl ich so etwas schon zig male genau so gemacht habe (Dachte ich zumindest xD)
Und zwar:
Eine CustomView soll einfach einen blauen Kreis zeichnen (der nachher dann mit dem Finger verschoben werden soll).
Von diesen Kreisen soll es dann 2 Stück geben.
Adde ich nun diesen Kreis zu meinem RelativeLayout und überschreibe nicht die onMeasure Methode in der View, dann wird der Kreis angezeigt und alles funktioniert. Problem hier ist nur: Die View nimmt dann den ganzen Bildschirm als Größe ein, was bedeutet das nachher nicht mehr der 2. Kreis angewählt werden kann weil der 1. ja über allem drüber liegt (oder umgekehrt). Weiterhin ist es auch unnötig das für 48 pixel der ganze Bildschirm eingenommen wird.
Also wollte ich das eben nur diese 48px eingenommen werden.
Habe also die onMeasure Methode wie folgt überschrieben:
1@Override
2 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
3 {
4 final int DEFAULT_WIDTH = (int)radius*2;
5 final int DEFAULT_HEIGHT = (int)radius*2;
6
7 int w = widthMeasureSpec;
8 if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT)
9 {
10 w = DEFAULT_WIDTH;
11 }
12
13 int h = heightMeasureSpec;
14 if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT)
15 {
16 h = DEFAULT_HEIGHT;
17 }
18
19 setMeasuredDimension(w, h);
20
21 }
2 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
3 {
4 final int DEFAULT_WIDTH = (int)radius*2;
5 final int DEFAULT_HEIGHT = (int)radius*2;
6
7 int w = widthMeasureSpec;
8 if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT)
9 {
10 w = DEFAULT_WIDTH;
11 }
12
13 int h = heightMeasureSpec;
14 if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT)
15 {
16 h = DEFAULT_HEIGHT;
17 }
18
19 setMeasuredDimension(w, h);
20
21 }
Und beim initialisieren der Kreise tue ich folgendes:
1RelativeLayout rl = (RelativeLayout)view.findViewById(R.id.pickarealayout);
2
3 Edge edge1 = new Edge(getActivity(),200, 200, 24);
4 edge1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
5 Edge edge2 = new Edge(getActivity(), 100, 100, 24);
6 edge2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
7 rl.addView(edge1);
8 rl.addView(edge2);
2
3 Edge edge1 = new Edge(getActivity(),200, 200, 24);
4 edge1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
5 Edge edge2 = new Edge(getActivity(), 100, 100, 24);
6 edge2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
7 rl.addView(edge1);
8 rl.addView(edge2);
Konstruktor und onDraw von Edge ist übrigens:
1public Edge(Context context,float x,float y,float radius)
2 {
3 super(context);
4
5 this.x = x;
6 this.y = y;
7 this.radius = radius;
8 tolerance = radius/2;
9 painter = new Paint();
10 painter.setStyle(Paint.Style.FILL);
11 painter.setColor(Color.CYAN);
12 painter.setAlpha(128);
13
14
15
16 }
17
18 @Override
19 protected void onDraw(Canvas canvas)
20 {
21 // TODO Auto-generated method stub
22 super.onDraw(canvas);
23
24 canvas.drawCircle(x, y,radius,painter);
25 }
2 {
3 super(context);
4
5 this.x = x;
6 this.y = y;
7 this.radius = radius;
8 tolerance = radius/2;
9 painter = new Paint();
10 painter.setStyle(Paint.Style.FILL);
11 painter.setColor(Color.CYAN);
12 painter.setAlpha(128);
13
14
15
16 }
17
18 @Override
19 protected void onDraw(Canvas canvas)
20 {
21 // TODO Auto-generated method stub
22 super.onDraw(canvas);
23
24 canvas.drawCircle(x, y,radius,painter);
25 }
Und nun, wird nichts mehr angezeigt. Weiß jemand woran das liegt?
Vielen Dank schon mal.
Viele Grüße
— geändert am 11.11.2013, 16:23:33
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.