Custom View wird nicht mehr angezeigt wenn onMeasure implementiert ist

  • Antworten:0
Barbaric Chicken
  • Forum-Beiträge: 66

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:
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 }

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);



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 }

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

Antworten