android– 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图

android– 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图,第1张

概述你好,我正在尝试做一个教练标记过教程.Main.javapublicclassMainextendsActivity{privateButtonbutton1;privateintx;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setConte

你好,我正在尝试做一个教练标记过教程.

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

所以基本上,当活动首次启动时会调用showOverlay方法.它显示一个占据整个屏幕的对话框,并且透明背景没有标题.下面看到的overlay.xml是此对话框的布局.

我想要做的是动态调整文本视图的位置,使其在按钮上方以补偿不同的设备屏幕(将来我将添加带有指向事物的箭头的图像视图,因此如果这些箭头没有指向它将会很奇怪在他们看来他们参考).

请注意.我不能使用showCaseVIEw,因为我将针对API 8.

上图显示了我想要做的事情.将显示“HEEEEEELP”的文本视图移动到略高于按钮的位置.

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>

谢谢你的阅读.

更新2

我的OnCreate方法

 @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);                 return true;            }        });    }

我现在可以访问button1的坐标.但是,我不确定如何将文本视图放在按钮上方,该按钮能够满足不同的设备尺寸.
我尝试使用setmargins方法的参数,但很难判断数量.
我做了一些研究,发现我可以使用布局参数的相对布局,并使用像ABOVE等字段.但是这似乎没有按预期工作.文本视图不会超出按钮.

我的代码.

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

请注意,我的overlay_vIEw.xml已成为相对布局.

解决方法:

这是你应该做的:

button1.getVIEwTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {    public boolean onPreDraw() {         button1.getVIEwTreeObserver().removeOnPreDrawListener(this);         x =  button1.gettop();         showOverLay();         return true;    }});

实际上当你调用x = button1.gettop();在onCreate()中,button视图尚未绘制和测量,因此gettop的值为0.试试这个.

总结

以上是内存溢出为你收集整理的android – 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图全部内容,希望文章能够帮你解决android – 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存