im trying to measure a ImageView, after my fragment is displayed, or if possible before.
I heared, that its not yet possible in the onActivityCreated. But somehow it works with the global Layout listener. -But how? -I have a method, wich measures and does some code, i just don't know when to call the method.
Can somebody gice an example?
the beginning of the measure method:
public void skalierung() {
InputStream dots=getResources().openRawResource(R.drawable.amountofdots);
Bitmap dotsBmp = BitmapFactory.decodeStream(dots);
View mainframe=(View)getActivity().findViewById(R.id.mainframe);
int breite=mainframe.getWidth();
Thanks!
To set a GlobalLayoutListener
you have to get ViewTreeObserver
of your View
using the view.getViewTreeObserver()
method which :
Returns the ViewTreeObserver for this view's hierarchy. The view tree observer can be used to get notifications when global events, like layout, happen.
After doing that well , you can addOnGlobalLayoutListener
on your ViewTreeObserever
OnGlobalLayoutListener
: Interface definition for a callback to be invoked when the global layout state or the visibility of views within the view tree changes.
and inside the onGlobalLayout
method you can call the getWidth
on the your desired view, here's an example :
View mainframe=(View)getActivity().findViewById(R.id.mainframe);
ViewTreeObserver vto = mainframe.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
skalierung(); // here you can call the getWidth and getHeight methods
ViewTreeObserver obs = mainframe.getViewTreeObserver();
// you have to reset the ViewTreeObserver each time to ensure the reuse of the OnGlobalLayoutListener
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
}
});
Hope it helps.