2016-05-13 6 views
3

In einem RecyclerView, ich versuche, die X- und Y-Position des angeklickten Elements zu erhalten. Dieser ist in meinem Adapter:RecyclerView Element X und Y sind 0, wenn geklickt

@Override 
    public void onBindViewHolder(AlfabetoViewHolder holder, final int position) { 
     // setImage(holder.imageButton, images.get(position)); 

     holder.imageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       view.getX(); // This is 0, but it shouldn't be! 
       view.getY(); // This is also 0. 
       executaSomAnimacaoLetra(sounds.get(position), Utils.getResourceFromFile(popups.get(position), context), view); // I do some stuff here 
      } 
     }); 


    } 

Das Ding ist, beide X ein Y immer 0 zurück, und sie sollten nicht. Ich brauche das X und Y des angeklickten Elements, um einige Animationen zu machen.

Ich habe bereits versucht, die X- und Y-Position immer innerhalb eines OnGlobalLayoutListener und innerhalb eines OnPreDrawListener (beide arbeiten, wenn Sie die X und Y auf der onCreate Aktivität müssen), aber sie kehren auch 0.

I‘ m die GridLayoutManager auf meinem RecyclerView mit:

recyclerView.setLayoutManager(new GridLayoutManager(Activity_alfabeto.this, 7, LinearLayoutManager.VERTICAL, false)); 

Jede Hilfe sehr geschätzt wird.

+0

Nicht sicher, aber was ist ein kleines Gewinde auf der RootView wie: 'view.post (new Runnable() {... view.getX(); Ansicht .getY();}); 'Damit die Benutzeroberfläche angezeigt werden kann, haben Sie es versucht? – Fllo

+0

Versuchte das schon, es hat nicht funktioniert. Eigentlich habe ich gerade herausgefunden, was passiert ist, werde die Antwort posten, aber danke für deine Eingabe! –

Antwort

6

Es funktioniert. Ich hatte diesen Ansatz zu verwenden:

int[] originalPos = new int[2]; 
view.getLocationInWindow(originalPos); 
//originalPos[0] is my X 
//originalPos[1] is my Y 

es getX und getY sind in Bezug auf die Ansicht der Eltern, nicht ihre absolute Position auf dem Bildschirm erscheint.

view.getLocationOnScreen(originalPos); 

Könnte auch verwendet werden.

+1

Es funktioniert nur, wenn ich die Recycleransicht nicht scrolle. Wenn ich scroll - es gibt mir falsche Koordinaten – tieorange

+0

@tieorange Sie möchten vielleicht berücksichtigen, die Menge der Scroll, der RecyclerView getan wurde. Ich kann es mir jetzt nicht ansehen, aber es ist einen Versuch wert! –

+0

@ FelipeRibeiroR.Magalhaes vielen Dank – thanhbinh84

-1

Die folgenden für mich gearbeitet:

view.getRawX() 
view.getRawY()