2016-05-13 20 views
3

RecyclerViewでは、クリックしたアイテムのXとYの位置を取得しようとしています。両方のX、Yは常に0を返し、クリックしたときのRecyclerViewアイテムのXとYは0です

@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 
      } 
     }); 


    } 

事がある、と彼らはいけない: これは私のアダプターの内部にあります。いくつかのアニメーションを行うには、クリックしたアイテムのXとYが必要です。

私はすでにOnGlobalLayoutListenerの内側とOnPreDrawListener(あなたが活動ののonCreate上のXとYを必要とする作業の両方)の内部でXとYの位置を取得しようとしたが、彼らはまた、私は「0

を返します私RecyclerViewGridLayoutManagerを使用してメートル:

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

すべてのヘルプは高く評価されます。

+0

わからないのが、何としてrootviewに少しスレッドに関する: 'view.post(新しいRunnableを(){... view.getX();ビュー.getY();}); 'UIを表示させるには、試しましたか? – Fllo

+0

すでに試してみましたが、うまくいきませんでした。実際に私は何が起こっていたのかを理解し、答えを投稿しますが、あなたの入力に感謝します! –

答えて

6

これは機能しています。私は、このアプローチを使用する必要がありました:

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

getXメソッドとのgetYは、ビューの親ではなく、画面上での絶対位置を基準にしていそうです。

view.getLocationOnScreen(originalPos); 

も使用できます。

+1

リサイクラービューをスクロールしない場合にのみ機能します。私がスクロールすると、間違った座標が返されます。 – tieorange

+0

@tieorange RecyclerViewに行われたスクロールの量を考慮したいかもしれません。今すぐ見ることはできませんが、試してみる価値があります! –

+0

@ FelipeRibeiroR.Magalhaesありがとう – thanhbinh84

-1

以下の私の仕事:

view.getRawX() 
view.getRawY() 
関連する問題