|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Obtener el Ancho de pantalla desde codigo eclipse
Muy buenas, finalmente pude implementar NineOldAndroid a mi App pero me salio un problema y no se como resolverlo, es por eso que acudo a ustedes que son expertos en programación, bueno mi problema es que tengo un ObjectAnimator y todo va bien pero queria saber como puedo obtener el ancho total de la pantalla y convertirlo en un valor negativo para usarlo como una coordenada, intente con Display getWidth() y getHeight() pero estos no funcionan y mi API minima es la 9 y no se que mas hacer, la animacion no se muestra, agradeceria mucho su ayuda.
Dejo aqui mi codigo del MainActivity Código:
package com.JiimSoft.animacioneshoney; import android.app.Activity; import android.os.Bundle; import android.view.View; import com.nineoldandroids.animation.ObjectAnimator; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final View Imagen1 = findViewById(R.id.Imagen1); final int duration = 1 * 1000; //ViewHelper.setPivotX(Imagen1, Imagen1.getWidth()); //ViewHelper.setPivotY(Imagen1, Imagen1.getHeight()); final int AnchoTotal = Imagen1.getWidth()*(-1); ObjectAnimator.ofFloat(Imagen1, "rotationY", 0, 360).setDuration(duration).start(); ObjectAnimator.ofFloat(Imagen1, "translationX", AnchoTotal, 0).setDuration(duration).start(); } } |
|
#2
|
||||
|
||||
Para obtener el tamaño de la pantalla se hace así:
Display display = getWindowManager().getDefaultDisplay(); Point tam= new Point(); display.getSize(tam); int widthPantalla = tam.x; int heightPantalla = tam.y; Puedes ejecutarlo en el OnCreate sin problemas, porque no depende de que la Activity esté dibujada aún o no. Ahora bien, en tu código no estás obteniendo el ancho de la pantalla, sino el ancho de Imagen1. El cual es correcto obtenerlo mediante Imagen1.getWidth(), PERO, únicamente cuando como mínimo el OnLayout de esa View se ha ejecutado. ¿Cuándo sabes como mínimo que ya se ha ejecutado el OnLayout de una View? En el ViewTreeObserver.OnGlobalLayoutListener. Como ya te hablé una vez sobre esa función no hace falta que te repita como se usa, y como puedes ver es bastante útil. |
#3
|
||||
|
||||
Muchas gracias por tu respuesta, Me dice que necesito un nivel minimo de API 13 y el mio es 9, ¿No existe otra forma de hacer lo mismo pero que sea universal a partir de la API 9 u 8?. Muchas gracias de antemano.
|
#5
|
||||
|
||||
|
#6
|
||||
|
||||
Vale, es cierto, lo tengo en uno que es para API 18.
Quita esa línea y usa display.getWidth() y display.getHeight() en su lugar. |
#7
|
||||
|
||||
Gracias por tu pronta respuesta pero no me funciona ni con eso, ademas ese metodo fue desaprobado desde la api 13 si no me equivoco y to creo que dara error en APIs nivel 13 o superior, no sabes que podria hacer?, gracias nuevamente.
|
#8
|
||||
|
||||
Hazlo en el ViewTreeObserver.OnGlobalLayout, a ver si ahí te funciona. Y que algo esté deprecated no significa que no funcione, sino simplemente que no es recomendable usarlo. Aún así, puedes comprobar que versión de Android se está ejecutando para ejecutar un método o ejecutar otro.
|
#9
|
||||
|
||||
Muchas gracias kriogeN eres un genio, me funciona a la perfección en onGlobalLayoutListener, no quiero parecer abusivo ni nada por el estilo, ya googlee y no encuentro nada de lo que me dices pero tambien lo habia pensado eso de comprobar la version de android, ¿Podrias decirme por favor como hacerlo?.
|
#10
|
||||
|
||||
__________________
|
Gracias de parte de: | ||
#11
|
||||
|
||||
Gracias por todas sus respuestas, lo logre haciendo esto pero aun no lo probe en un telefono con API mayor o igual a la 13 queria saber si esta bien o es que tengo que corregir algo. Muchas gracias nuevamente.
Código:
@SuppressLint("NewApi") @Override public void onGlobalLayout() { final View Imagen1 = findViewById(R.id.Imagen1); final int duration = 1 * 1000; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { Display display = getWindowManager().getDefaultDisplay(); int AnchoDePantalla = display.getWidth(); ObjectAnimator.ofFloat(Imagen1, "rotationY", 0, 360).setDuration(duration).start(); ObjectAnimator.ofFloat(Imagen1, "translationX", -AnchoDePantalla, 0).setDuration(duration).start(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { Display display = getWindowManager().getDefaultDisplay(); Point tam= new Point(); display.getSize(tam); int AnchoDePantalla = tam.x; ObjectAnimator.ofFloat(Imagen1, "rotationY", 0, 360).setDuration(duration).start(); ObjectAnimator.ofFloat(Imagen1, "translationX", -AnchoDePantalla, 0).setDuration(duration).start(); } } |
![]() |
![]() |
||||||
|