android - Making a tutorial (coach mark) overlay. Need help moving a view based on the position of another -
android - Making a tutorial (coach mark) overlay. Need help moving a view based on the position of another -
hello trying create coach mark on lay tutorial.
main.java
public class main extends activity { private button button1; private int x; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_help_overlay); button1 = (button)findviewbyid(r.id.button1); x = button1.gettop(); showoverlay(); } private void showoverlay(){ this.setrequestedorientation(activityinfo.screen_orientation_portrait); final dialog dialog = new dialog(this, 0); dialog.getwindow().setbackgrounddrawable(new colordrawable(android.graphics.color.transparent)); dialog.getwindow().setlayout(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent); dialog.requestwindowfeature(window.feature_no_title); dialog.setcontentview(r.layout.overlay_view); relativelayout layout = (relativelayout) dialog.findviewbyid(r.id.overlaylayout); layout.setonclicklistener(new onclicklistener() { @override public void onclick(view arg0) { main.this.setrequestedorientation(activityinfo.screen_orientation_sensor); dialog.dismiss(); } }); dialog.show(); } }
so basically, showoverlay method called when activity first starts. shows dialog takes whole screen , has transparent background has no title. overlay.xml seen below layout of dialog.
what want dynamically adjust position of text view above button compensate different device screens (in future add together image views arrows pointing things weird if these arrows don't point @ view refer to).
please note. cannot utilize showcaseview because targeting api 8.
the above image shows want do. move text view says "heeeeeelp" above button.
main_activity.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_centerhorizontal="true" android:layout_marginbottom="96dp" android:onclick="idk" android:text="this button" /> </relativelayout>
overlay.xml
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@null" android:id="@+id/overlaylayout"> <textview android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true" android:text="heeeeeeelp" android:textcolor="#ffffff" android:textappearance="?android:attr/textappearancelarge" /> </relativelayout>
thank reading.
update 2
my oncreate method
@override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_help_overlay); button1 = (button)findviewbyid(r.id.button1); button1.getviewtreeobserver().addonpredrawlistener(new onpredrawlistener() { public boolean onpredraw() { top = button1.gettop(); bottom = button1.getbottom(); left = button1.getleft(); right = button1.getright(); showoverlay(); button1.getviewtreeobserver().removeonpredrawlistener(this); homecoming true; } }); }
i have access co-ordinates of button1. however, unsure of how go placing text view above button able cater different device sizes. tried playing around parameters of setmargins method hard justice amounts. did research , found utilize relative layout layout params , utilize fields above etc. not seem working intended. text view not go above button.
my code.
relativelayout.layoutparams lp = (relativelayout.layoutparams)textview.getlayoutparams(); lp.addrule(relativelayout.center_horizontal, r.id.button1); lp.addrule(relativelayout.above, r.id.button1); textview.setlayoutparams(lp);
please note overlay_view.xml has become relative layout.
this should do:
button1.getviewtreeobserver().addonpredrawlistener(new onpredrawlistener() { public boolean onpredraw() { x = button1.gettop(); showoverlay(); homecoming true; } });
actually when phone call x = button1.gettop();
in oncreate()
button view not yet drawn , measured, hence value of gettop
0. seek out.
android
Comments
Post a Comment