2010-08-25 27 views
14

¿Cómo se crea un borde animado punteado o punteado de una forma arbitraria en Android? En XML (preferido) o programáticamente.Borde discontinuo animado en Android

Vea la imagen a continuación para ver un ejemplo.

alt text

+0

¿Es deseable en un dispositivo móvil? Además de ser tan atractivo como la etiqueta BLINK, va a consumir energía de la batería. Si esto se trata de anuncios, esa no es la manera de obtener clientes satisfechos. –

+0

Es deseable para mi caso de uso. Es para una aplicación de gráficos, y el borde de la animación discontinua es un símbolo universal para una máscara. Además, no creo que esto consuma más batería que, por ejemplo, un fondo real. – hpique

+0

OK, sospechaba de propósitos publicitarios nefastos. Ese es un propósito razonable. –

Respuesta

18

¿Has visto la demostración PathEffects API? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html

Produce precisamente una línea animada y puede ajustar la ruta hasta el borde de la vista para crear un borde. Por ejemplo:

definir un camino por su parámetros de la vista/forma arbitraria:

Path path = new Path(); 
path.addRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), Path.Direction.CW); 

continuación, crear un PathEffect discontinua con:

PathEffect pe = new DashPathEffect(new float[] {10, 5, 5, 5}, phase); 

asentando después la asociada con un objeto pintar y dibujar :

mPaint.setPathEffect(pe); 
canvas.drawPath(path, mPaint); 

EDITAR: El efecto animado proviene de cambiar continuamente la fase y redibujando En la demostración de la API llama a invalidate() en el método onDraw() (que desencadena onDraw() ...)

+0

Gracias antonyt!Esto es exactamente lo que estaba buscando. Lástima que no se puede definir en xml. – hpique

+1

Un problema con esto es que asigna una gran cantidad de objetos que desencadenarán la recolección de elementos no utilizados y pueden provocar que la animación tartamudee. Puede evitar parte del problema asignando float [] como miembro de clase en alguna parte. No estoy seguro de cómo evitar la asignación de DashPathEffect cada vez que cambia la fase, aunque, por supuesto, usted mismo puede manejar la animación traduciendo las líneas. – mwd

+0

Puede crear una matriz de DashPathEffects (de tamaño igual al número más alto en la matriz flotante, 10 en este caso), y volver a utilizar estos efectos. Al menos esto es lo que estoy haciendo, pero para el efecto 'PathDashPathEffect'. –

0

XML ... supongo que no es posible. Pero puede usar una vista personalizada o un SurfaceView y manejar el dibujo usted mismo. Diviértete con eso :)

+0

¿Alguna sugerencia para implementarlo con una vista personalizada o SurfaceView? – hpique

+0

puede dibujar líneas en cada lienzo y el objeto Paint usado puede tener diferentes estilos. Si cambia entre la línea blanca con una línea discontinua negra arriba y la línea negra con línea discontinua blanca arriba en cada cuadro, debe obtener el efecto deseado. – WarrenFaith

0

Podría usar alguna forma de dos imágenes de 9patch como marco de fondo alrededor del archivo de imagen que desea presentar, una en cada uno de los dos diseños. Las imágenes diferirían en términos de la ubicación de los elementos punteados. Intercambie las vistas rápidamente (puede necesitar un retraso) y puede obtener el efecto que desee. Realmente no sé cuán efectivo sería en términos de poder permitir que el usuario continúe usando la aplicación y masticando la batería ...

+0

Dos 9 imágenes de parche en una animación dibujable. Eso podría funcionar, y es factible a través de XML. Le daría una oportunidad. – hpique

+0

No. No funciona Las imágenes de 9 parches no repiten patrones, simplemente estiran una parte de la imagen. – hpique

+0

Lo siento, a lo que me refería es que creas dos imágenes en formato 9patch. Tendrá que crear los patrones usted mismo, pero de forma tal que si tuviera que cambiar rápidamente entre ellos crearía la ilusión de que los guiones se movían. – Adriaan

Cuestiones relacionadas