No hay una solución lista para usar para esto.
Podemos usar la siguiente fórmula para encontrar el punto en la circunferencia del círculo en el ángulo dado θ y luego agregar la vista en esas posiciones, ajustar el margen izquierdo y superior para las vistas.
Para un círculo cuyo centro es (x, y) y cuyo radio es r , el punto en la circunferencia del círculo en el ángulo θ es (x + r * cos (θ), y + r * sin (θ)) . Según la cantidad de videos para mostrar, elija los valores theta que distribuirán uniformemente las vistas.
- Cómo leer todos los valores clave secundarios de un elemento secundario de la base de datos de Firebase en Android
- Cómo ocultar aplicaciones en el sistema operativo Android sin usar aplicaciones de terceros
- ¿Qué idiomas se utilizan para hacer aplicaciones de iOS o aplicaciones de Android?
- Cómo controlar mi computadora con mi dispositivo Android
- ¿Por qué no hay una ROM Android universal para todos los dispositivos?
El punto que calculamos con esta fórmula debe ser el centro de VideoView que queremos mostrar.
Aquí hay un fragmento de código para esto. Este fragmento de ninguna manera está completo, pero debería darte una idea. Para simplificar, puede usar algunos valores codificados en los que he llamado a algunos métodos indefinidos personalizados para probar el resultado de este fragmento.
FrameLayout layout = // obtener referencia a FrameLayout
float centerX = layout.getWidth () / 2;
float centerY = layout.getHeight () / 2;
float angleForEvenDistribution = 360 / videosList.size (); / * Según la cantidad de videos, calcule θ * /
radio de flotación = 200f;
flotante theta = 0;
para (int videoIndex = 0; videoIndex <videosList.size (); videoIndex ++) {
float xPos = radio * (float) Math.cos (Math.toRadians (theta)) + centerX;
float yPos = radio * (float) Math.sin (Math.toRadians (theta)) + centerY;
Ver videoView = getVideoViewFor (videoList.get (videoIndex)); // Inflar vista desde xml o crear en tiempo de ejecución.
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams (getWidthForVideoViewBasedOnSizeOfCircleAndNumberOfVideoViews (), getHeightForVideoViewBasedOnSizeOfCircleAndNumberOfVideoViews ()); // Use algunas constantes para probar aquí y puede continuar y modificarlo para tener en cuenta el tamaño del círculo y la cantidad de videos.
lp.leftMargin = xPos – getWidthForVideoViewBasedOnSizeOfCircleAndNumberOfVideoViews () / 2;
lp.topMargin = yPos – getHeightForVideoViewBasedOnSizeOfCircleAndNumberOfVideoViews () / 2;
layout.addView (videoView, lp);
theta + = angleForEvenDistribution;
}