Barbaric Chicken
- Forum-Beiträge: 66
20.11.2013, 09:18:45 via Website
20.11.2013 09:18:45 via Website
Hallo,
ich stehe mal wieder auf dem Schlauch vielleicht kann diesesmal jemand helfen.
Ich möchte einen Rahmen mit Überschrift zeichnen. In diesen Rahmen sollen dann Childviews eingefügt werden können die innerhalb dieses Rahmens zu sehen sind.
Hierfür habe ich eine eigene Klasse von LinearLayout abgeleitet und die onDraw Methode überschrieben. Der Rahmen + Überschrift wird wunderbar dargestellt.
Doch es lassen sich einfach keine Views in das Layout adden. Die große Frage ist, warum? Was habe ich übersehen oder was blockiert die Sicht auf die Views? Hier mal die Custom Klasse:
Ich habe gelesen, dass man die Methode addView überschreiben soll, verstehe jedoch nicht ganz, wie ich dann über diese Funktion view adden kann.
Vielen Dank.
Mit freundlichen Grüßen
ich stehe mal wieder auf dem Schlauch vielleicht kann diesesmal jemand helfen.
Ich möchte einen Rahmen mit Überschrift zeichnen. In diesen Rahmen sollen dann Childviews eingefügt werden können die innerhalb dieses Rahmens zu sehen sind.
Hierfür habe ich eine eigene Klasse von LinearLayout abgeleitet und die onDraw Methode überschrieben. Der Rahmen + Überschrift wird wunderbar dargestellt.
Doch es lassen sich einfach keine Views in das Layout adden. Die große Frage ist, warum? Was habe ich übersehen oder was blockiert die Sicht auf die Views? Hier mal die Custom Klasse:
1public class CustomCell extends LinearLayout
2{
3 private Paint painter;
4 private Rect rect;
5 private Context context;
6 private String title;
7 private int textSize;
8 private float px;
9
10 public CustomCell(Context context,String title)
11 {
12 super(context);
13 this.context = context;
14 this.title = title;
15
16 painter = new Paint();
17 painter.setColor(Color.BLACK);
18 painter.setStyle(Style.STROKE);
19 painter.setStrokeWidth(2);
20
21 px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, context.getResources().getDisplayMetrics());
22 textSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics());
23
24 this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
25 this.setWillNotDraw(false);
26
27 rect = new Rect(0,0,getWidth(),getHeight());
28
29 setOrientation(LinearLayout.VERTICAL);
30
31
32 Button b = new Button(context);
33 b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
34 b.setText("Hallo ich bin ein Button");
35 addView(b);
36
37 }
38
39
40
41
42
43 @Override
44 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
45 {
46 float fivePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, context.getResources().getDisplayMetrics());
47 final int width = context.getResources().getDisplayMetrics().widthPixels - (int)fivePx;
48 final int height = (int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics()));
49
50 int w = widthMeasureSpec;
51 int h = heightMeasureSpec;
52
53 if(getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT)
54 {
55 w = width;
56 }
57
58 if(getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT)
59 {
60 h = height;
61 }
62
63 setMeasuredDimension(w, h);
64
65 }
66
67
68 @Override
69 protected void onDraw(Canvas canvas)
70 {
71 // TODO Auto-generated method stub
72 super.onDraw(canvas);
73 rect.set(0, 0, getWidth(), getHeight());
74 canvas.drawRect(rect, painter);
75
76 rect.set(1,1,(int)(getWidth()*0.7),(int)(getHeight()*0.2));
77 canvas.drawRect(rect, painter);
78 painter.setColor(Color.rgb(51, 204, 204));
79 painter.setStyle(Style.FILL);
80
81 canvas.drawRect(rect, painter);
82
83 painter.setColor(Color.WHITE);
84 painter.setTextSize((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,20, context.getResources().getDisplayMetrics()));
85 painter.setAntiAlias(true);
86 canvas.drawText(title, px, px+textSize, painter);
87
88 }
89
90
91}
2{
3 private Paint painter;
4 private Rect rect;
5 private Context context;
6 private String title;
7 private int textSize;
8 private float px;
9
10 public CustomCell(Context context,String title)
11 {
12 super(context);
13 this.context = context;
14 this.title = title;
15
16 painter = new Paint();
17 painter.setColor(Color.BLACK);
18 painter.setStyle(Style.STROKE);
19 painter.setStrokeWidth(2);
20
21 px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, context.getResources().getDisplayMetrics());
22 textSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics());
23
24 this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
25 this.setWillNotDraw(false);
26
27 rect = new Rect(0,0,getWidth(),getHeight());
28
29 setOrientation(LinearLayout.VERTICAL);
30
31
32 Button b = new Button(context);
33 b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
34 b.setText("Hallo ich bin ein Button");
35 addView(b);
36
37 }
38
39
40
41
42
43 @Override
44 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
45 {
46 float fivePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, context.getResources().getDisplayMetrics());
47 final int width = context.getResources().getDisplayMetrics().widthPixels - (int)fivePx;
48 final int height = (int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics()));
49
50 int w = widthMeasureSpec;
51 int h = heightMeasureSpec;
52
53 if(getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT)
54 {
55 w = width;
56 }
57
58 if(getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT)
59 {
60 h = height;
61 }
62
63 setMeasuredDimension(w, h);
64
65 }
66
67
68 @Override
69 protected void onDraw(Canvas canvas)
70 {
71 // TODO Auto-generated method stub
72 super.onDraw(canvas);
73 rect.set(0, 0, getWidth(), getHeight());
74 canvas.drawRect(rect, painter);
75
76 rect.set(1,1,(int)(getWidth()*0.7),(int)(getHeight()*0.2));
77 canvas.drawRect(rect, painter);
78 painter.setColor(Color.rgb(51, 204, 204));
79 painter.setStyle(Style.FILL);
80
81 canvas.drawRect(rect, painter);
82
83 painter.setColor(Color.WHITE);
84 painter.setTextSize((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,20, context.getResources().getDisplayMetrics()));
85 painter.setAntiAlias(true);
86 canvas.drawText(title, px, px+textSize, painter);
87
88 }
89
90
91}
Ich habe gelesen, dass man die Methode addView überschreiben soll, verstehe jedoch nicht ganz, wie ich dann über diese Funktion view adden kann.
Vielen Dank.
Mit freundlichen Grüßen
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.