Skip to content Skip to sidebar Skip to footer

Making A Tutorial (coach Mark) Overlay. Need Help Moving A View Based On The Position Of Another

Hello I am trying to make a coach mark over lay tutorial. Main.java public class Main extends Activity { private Button button1; private int x; @Override public v

Solution 1:

This is what you should do:

button1.getViewTreeObserver().addOnPreDrawListener(newOnPreDrawListener() {
    publicbooleanonPreDraw() {
         button1.getViewTreeObserver().removeOnPreDrawListener(this);
         x =  button1.getTop();
         showOverLay();
         returntrue;
    }
});

Actually when you call x = button1.getTop(); in onCreate() the Button view is not yet drawn and measured, hence the value of getTop is 0. Try this out.

Solution 2:

Don't use Dialog for such overlays, they may require a separate window. Just make you activity such that it can display a View on top of everything i.e. its content view is a FrameLayout to which you can easily add and remove any View object.

Then, you can find any other view object's global rectangle in window by using getGlobalVisibleRect(). Next, you align your help content to any side of this rectangle.

Solution 3:

You should make your UI drawings after the layout completes its drawing. You can do this by attaching a Runnable interface on the layout's drawing thread. When you're calculating margins or paddings, you should do this after the view is created. Please see: onFinishInflate();

button1.post(newRunnable() {
   x = button1.getTop();

   showOverLayout();
});

Solution 4:

Add this in your showOverlay() method:

TextView textView = (TextView) dialog.findViewById(R.id.textView1);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, x);
textView.setLayoutParams(params);

and remove this from your xml file:

android:layout_centerVertical="true"

Post a Comment for "Making A Tutorial (coach Mark) Overlay. Need Help Moving A View Based On The Position Of Another"