2010-03-29 12 views
6

HI all,Nuevo en Android: dibujo de una vista en tiempo de ejecución

Estoy empezando a desarrollar para Android. Estoy buscando portar una de mis aplicaciones de iPhone, pero no sé cómo dibujar una vista en tiempo de ejecución (una vista no declarada en el XML). Básicamente, quiero dibujar un rectángulo simple, pero luego ser capaz de manipular su marco después de dibujarlo.

Lo siento si esta es una pregunta muy, muy simple, pero parece que no puedo encontrar algo equivalente al SDK de iPhone aquí.

¡Gracias de antemano!

Respuesta

7

Parece que quiere experimentar con gráficos 2D; para eso, debe usar un Canvas. Puede controlar el dibujo del lienzo a través del método invalidate(), que le dice a Android que vuelva a dibujar todo lo que activa su método personalizado onDraw(). Menciona que no quiere usar el archivo XML, pero esa es la forma más sencilla de poner un lienzo: no tiene que definir su contenido en el archivo XML, sino simplemente indicarle el archivo de diseño que está allí. Una forma poderosa pero simple de poner un Lienzo en su aplicación es personalizar una Vista. Por ejemplo, incluya en su archivo XML un elemento <your.package.CustomView android:.../>. Luego declare la clase CustomView extends View. Cualquier tipo de dibujo que desee hacer, ingrese el método onDraw().

Por ejemplo, para dibujar un rectángulo, haga algo como esto.

//First you define a colour for the outline of your rectangle 
rectanglePaint = new Paint(); 
rectanglePaint.setARGB(255, 255, 0, 0); 
rectanglePaint.setStrokeWidth(2); 
rectanglePaint.setStyle(Style.STROKE); 

//Then create yourself a Rectangle 
Rect rectangle = new Rect(left, top, right, bottom) //in pixels 

//And here's a sample onDraw() 
@Override 
public void onDraw(Canvas canvas){ 
    rectangle.offset(2, 2); 
    canvas.drawRect(rectangle, rectanglePaint); 
} 

Cada vez invalidate() se llama desde su programa, la vista se vuelve a dibujar el rectángulo y se trasladó 2px hacia abajo y hacia la derecha. Nota: el redibujado solo ocurre cuando el hilo principal está 'esperando'. En otras palabras, si tiene una llamada de bucle invalidada varias veces, la vista no se dibujará hasta que termine el bucle. Puede evitar esto, pero eso agrega más complicaciones. Para ver un ejemplo de cómo se hace eso, mira el juego de ejemplo LunarLander de Google: es un juego simple que demuestra una vista personalizada, 2 hilos y cómo implementar animación continua.

+0

Funciona muy bien, gracias! –

Cuestiones relacionadas