2011-12-14 13 views
9

Actualmente tengo ImageView que extiende la longitud del dispositivo y se escala en 3. Obviamente, los lados se recortan fuera de la pantalla. Quiero que la animación comience con el lado izquierdo de la imagen en el lado izquierdo del dispositivo, luego desvié el cursor hasta que el lado derecho de la imagen esté en el lado derecho del dispositivo.Traducción relativa en la animación de la propiedad en xml

puedo alcanzarlos mediante la creación de la imagen a su base inicial a continuación, básicamente, hacer esto:

<objectAnimator 
    android:propertyName="translationX" 
    android:duration="6000" 
    android:valueTo="-1280" 
    android:valueType="floatType" 
    /> 

Sin embargo, esto sólo funciona porque sé que el tamaño exacto de la imagen y el tamaño exacto de mi Motorola Xoom. Naturalmente, quiero que esto funcione en cualquier dispositivo, entonces necesito algo menos codificado. Con las animaciones Tween, funciona bien, ya que puedes traducir algo en función de un porcentaje de su tamaño. No fue perfecto, pero funcionó bastante bien para este efecto. Las aniimaciones de propiedad no parecen tener esto. Las propiedades translationX y X deben tener unidades.

¿Hay una manera simple de traducir una vista con animaciones de propiedades basadas en la ubicación relativa? ¿Tendré que hacer un archivo de animación por separado para cada dimensión? ¿Hay alguna otra forma en que pueda lograr este efecto? Prefiero no hacer mi propia animación.

+0

¿sabía cómo para hacerlo ??? – confucius

Respuesta

0

Podría crear código para 'cubos' de tamaño de dispositivo por separado que desea admitir (por ejemplo, tableta, paisaje de teléfono, etc.) que tiene anchuras dp conocidas. A continuación, puede utilizar esto a continuación para escalar la imagen (donde 384 es 384 pb para un determinado ancho de cubo del dispositivo) y hacer algo similar para el valor que necesita.

//Get the device screen pixel density so that you can scale 
//the image in density independent pixels rather than pixels 
final float scale = getActivity().getResources(). 
getDisplayMetrics().density; 

//set the number of dp for the height and width by changing 
//the number you multiply the (scale + 0.5f) by e.g. 384 
int pixelsh = (int) (384 * scale + 0.5f); 
int pixelsw = (int) (384 * scale + 0.5f); 

Esta es la manera de convertir píxeles absolutos a píxeles dp. No sé cómo usarlos para lo que estás haciendo, pero al menos es un comienzo.

+0

Eso no es lo suficientemente detallado porque es imposible determinar en tiempo de compilación cuál será el tamaño de la vista en píxeles. Terminé descartando la idea y simplemente creando ObjectAnimators en tiempo de ejecución cuando se conocían los tamaños. – DeeV

0

Debe crear la animación en tiempo de ejecución al pasar el tamaño de pantalla de la pantalla actual del dispositivo. En primer lugar obtener el tamaño de la pantalla (NOTA: las métricas (anchura, altura) cambian dependiendo de la rotación del dispositivo):

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

int screenSize = metrics.widthPixels; 

y luego crear su ObjectAnimator:

ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize); 
oa.setDuration(6000); 
oa.start(); 
Cuestiones relacionadas