views:

65

answers:

1

I want to build my own custom view which should look like the Crysis-GUI.

At first I designed a XML-based Layout and made it visible via the setContentView(int resid)-Method. Worked pretty well.

But now I wan't to go a step further and draw in my Layout. So I created a new Class, let it extend View and overrode the onDraw()-Method. So far so good. Works as expected

public class RifleView extends View {

public RifleView(Context context) {
    super(context);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint p = new Paint();
    p.setARGB(255, 255, 0, 0);
    canvas.drawText("Hello World", 20, 20, p);
}

}

But how can I still use my XML-Layout? I can't do setContentView anymore, so how could the same effect be achieved?

+1  A: 

Why can't you use setContentView ? Just make an xml tag like that : <com.mycompany.mypackage.myComponent ... xml attributes an tags </com.mycompany.mypackage.myComponent>

fedj
But I wan't to use setContentView in my RifleView to have my XML-based Layout. And I then wan't to draw on it via the onDraw()-Method
Alien
You wan't that your rifleView has children ? It's a View... If you want it to have children, you have to extend ViewGroup
fedj
That makse sense, but why is my onDraw()-Method not called?
Alien
Because the method is dispatchDraw on a ViewGroup but don't forget to call super.dispatchDraw otherwise your children will not be drawn
fedj