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