2011-12-14 16 views
9

Attualmente ho un ImageView che estende la lunghezza del dispositivo ed è scalata per 3. Ovviamente, i lati sono tagliate fuori dello schermo. Voglio che l'animazione inizi con il lato sinistro dell'immagine sul lato sinistro del dispositivo, quindi la spostiamo finché il lato destro dell'immagine non si trova sul lato destro del dispositivo.traslazione relativa nell'animazione struttura in XML

io possa ottenere impostando l'immagine alla sua base iniziale poi in fondo a fare questo:

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

Tuttavia, questo funziona solo perché conosco l'esatta dimensione dell'immagine e la dimensione esatta del mio Motorola Xoom. Naturalmente, voglio che funzioni su qualsiasi dispositivo, quindi ho bisogno di qualcosa di meno hard-coded. Con le animazioni Tween, funziona bene poiché puoi tradurre qualcosa in base a una percentuale della sua dimensione. Non era perfetto, ma ha funzionato abbastanza bene per questo effetto. Le aniemazioni di proprietà non sembrano avere questo. Le proprietà translationX e X devono avere unità.

C'è un modo semplice di tradurre una vista con le animazioni di proprietà in base alla posizione relativa? Dovrò creare un file di animazione separato per ogni dimensione? C'è un altro modo in cui posso ottenere questo effetto? Preferirei non creare la mia animazione.

+0

lo sapevate come per farlo ??? – confucius

risposta

0

Potrebbe creare codice per dispositivi size 'secchi' separati che si desidera supportare (ad esempio tablet, telefono paesaggio etc.) che ha conosciuto larghezze dp. Quindi potresti usare questo sotto per ridimensionare l'immagine (dove 384 è 384dp per una certa larghezza del bucket del dispositivo) e fare qualcosa di simile per il valoreTo int di cui hai bisogno.

//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); 

Questo è il modo per convertire i pixel assoluti in pixel dp. Non so come usarli per quello che stai facendo, ma almeno è un inizio.

+0

Questo non è abbastanza dettagliato perché è impossibile determinare in fase di compilazione quale sarà la dimensione della vista in pixel. Alla fine ho scaricato l'idea e ho appena creato ObjectAnimators in fase di esecuzione quando le dimensioni erano note. – DeeV

0

È necessario creare l'animazione in fase di esecuzione passando le dimensioni dello schermo dello schermo del dispositivo corrente. In primo luogo ottenere la dimensione dello schermo (NOTA: le metriche (larghezza, altezza) cambiano a seconda della rotazione del dispositivo):

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

int screenSize = metrics.widthPixels; 

e quindi creare il tuo ObjectAnimator:

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