How to get X & Y coordinates of recyclerView items in adnroid?

Ehsan :

I want to get X and Y coordinates of the item's view of recyclerview. I use getLocationOnScreen() method but it return 0 for both X & Y. How can I get view's X/Y?

As I'm new in android developing, please help me:)

@Override
public void onBindViewHolder(@NonNull final TaskViewHolder holder, final int position) {

    Model model = datalist_model.get(position);
    holder.tv_title.setText(model.getTitle());
    holder.tv_comment.setText(model.getComment());

    int[] screen = new int[2];
    holder.iv_status.getLocationOnScreen(screen);
    Log.d(TAG, "x :" + screen[0] + " , y : " + screen[1]);
}
Mahdi M :

Your problem is because as the item's views don't created completely, getLocationOnScreen() method return 0 for both X/Y!

You can achieve your desired coordinates with implementing addOnGlobalLayoutListener() method in onBindViewHolder().

Something like below:

@Override
public void onBindViewHolder(@NonNull final TaskViewHolder holder, final int position) {
    Model model = datalist_model.get(position);
    holder.tv_title.setText(model.getTitle());
    holder.tv_comment.setText(model.getComment());
    holder.itemView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //Remove the listener before proceeding
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
                    holder.itemView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                else
                    holder.itemView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                int[] screen = new int[2];
                holder.iv_status.getLocationOnScreen(screen);
                Log.d(TAG, "x :" + screen[0] + " , y : " + screen[1]);
            }
        });
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=216983&siteId=1