2013-05-28 19 views
6

Sto provando a creare dinamicamente e quindi spostare un'immagine in un'attività Android. Tuttavia, i metodi setX() e setY() sembrano non funzionare correttamente. Imposta correttamente la posizione di un'immagine quando viene creata e posizionata per la prima volta, ma qualsiasi tentativo di aggiornarla determina il posizionamento dell'immagine nel punto sbagliato. Ad esempio, l'immagine si sposta sulla seguente codice:Android setX() e setY() si comportano in modo strano

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

Sulla ACTION_MOVE l'immagine viene spostata anche se i valori posizione xey rimangono gli stessi. Il genitore dell'immagine rimane lo stesso. La dimensione rimane la stessa. Se ottengo i valori x e y, continuerò a dire 206, ma non è più posizionato in (206, 206) sull'attività. Mi sono perso perché questo sta accadendo. Non riesco a trovare alcuna indicazione che l'immagine sia stata alterata tranne che per la posizione che cambia fisicamente.

risposta

13

Davvero, questo non dovrebbe accadere. In alternativa, prova ad impostare un'altra variabile e ad impostare x e y, oppure prendi x e ottieni y e aggiungi uno 0 a ciascuno di essi per la stessa posizione.

Come indicato nel Android - Use of view.setX() and setY in api 8, se hai cercato, c'è un'altra soluzione che funziona anche anche prima di api 8. LayoutParams opere come questa -

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

ci sono maggiori informazioni lì. Spero che questo aiuti

+1

Tyvm per la risposta. Usare params funziona per me. Sono ancora curioso di sapere cosa sta succedendo con setX e Y. Ho provato tutto ma ogni volta che imposto un valore dopo che è già stato impostato nell'evento down (indipendentemente da come imposto il nuovo valore) l'immagine viene spostata nella posizione sbagliata. È spento da un valore costante di circa 30 pixel troppo in alto ea sinistra dell'emulatore con cui sto testando. Ho pensato che dovesse cambiare il genitore della vista o qualcosa del genere, ma non è così. Non c'è letteralmente niente di diverso che io possa trovare. – user2423199

+0

Potrebbe essere la densità? Quando si impostano i numeri in modo programmatico, è necessario moltiplicare per getResources(). GetDisplayMetrics(). Density per modificare i valori px in valori dp – marmor

1

Eseguire lo stesso problema. View.setLeft(int)/View.setTop(int) ha funzionato per me

+0

Non ha funzionato per me. Ho appena allungato la mia vista verticalmente – tieorange

+1

@tieorange down vote? Credo che dovresti fare lo stesso per ogni risposta che non ha funzionato per te. Ma in generale le risposte più diverse sono là fuori, maggiori sono le probabilità che tu risparmi il tuo tempo risolvendo un problema con l'aiuto di altri, poiché un problema simile può effettivamente avere soluzioni diverse e uno può funzionare per te. O forse no. Continua a scavare in questo caso. Quindi in realtà non riesco a vedere alcun motivo pratico per la risposta al voto se non ha funzionato per il tuo caso particolare in quanto può ancora essere utile per gli altri. Incoraggia a condividere diverse soluzioni votando per quello che ha funzionato per te e non viceversa –

0

La tua attività è a schermo intero? Se no prova a farlo a schermo intero e dovrebbe risolvere il tuo problema.

0

Abbastanza tardi per rispondere, ma se qualcun altro sta affrontando lo stesso problema. Questo ha risolto il tutto per me è stata l'imbottiture nel file di layout:

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

Come qualcuno che in realtà di fronte a questo problema, ho risolvere questo problema rimuovendo qualsiasi imbottitura in parentView. Il riempimento sembra causare una modifica delle dimensioni del layout

Problemi correlati