Android 如何在vuforia中的摄影机视图中创建按钮?

Android 如何在vuforia中的摄影机视图中创建按钮?,android,vuforia,Android,Vuforia,我正在使用Vuforia AR sdk,希望在屏幕上的相机预览上创建一个按钮 我不知道在哪里以及如何添加按钮。以正常方式启动相机预览。在其顶部放置一个具有透明背景的布局,如下所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="matc

我正在使用Vuforia AR sdk,希望在屏幕上的相机预览上创建一个按钮


我不知道在哪里以及如何添加按钮。

以正常方式启动相机预览。在其顶部放置一个具有透明背景的布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>

 <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#ff000000"
    android:layout_height="match_parent">


    <ImageView
     android:id="@+id/start_image_button"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginLeft="10dp"
     android:layout_marginRight="5dp"
     android:scaleType="fitXY"
     android:layout_weight="1"
     android:src="@drawable/scan_image"/>

</RelativeLayout>
private View mStartupView;
mStartupView = getLayoutInflater().inflate(
R.layout.startup_screen, null);

// Add it to the content view:
addContentView(mStartupView, new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));
这样,您就可以在相机预览顶部看到您的按钮。希望它有帮助

我已经像这样编辑了camera\u overlay\u udt.xml。。在我的布局设计中,我放置了后退按钮和列表视图


之后,请编辑ImageTargets.java类

private static final String LOGTAG = "ImageTargets";
private Button b1;
private void initApplicationAR()
{
    // Create OpenGL ES view:
    int depthSize = 16;
    int stencilSize = 0;
    boolean translucent = Vuforia.requiresAlpha();

    mGlView = new SampleApplicationGLView(this);
    mGlView.init(translucent, depthSize, stencilSize);

    mRenderer = new ImageTargetRenderer(this, vuforiaAppSession);
    mRenderer.setTextures(mTextures);
    mGlView.setRenderer(mRenderer);

    b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            b1.setVisibility(View.GONE);
        }
    });

}
private void addOverlayView(布尔初始布局){
//膨胀要显示在摄影机视图上方的覆盖布局
LayoutFlater充气机=LayoutFlater.from(本机);
mUILayouts=(相对)充气器。充气(
R.layout.camera\u overlay\u udt,null,false);
mUILayouts.setVisibility(View.VISIBLE);
//如果这是应用程序第一次运行,则
//uiLayout背景设置为黑色,将设置为
//SDK初始化并准备好绘制后透明
if(初始布局){
mUILayouts.setBackgroundColor(颜色.透明);
}
//将充气布局添加到视图中
addContentView(mUILayouts,新的LayoutParams(LayoutParams.WRAP_内容,
LayoutParams.WRAP_内容);
//获取对底部导航栏的引用
mBottomBar=muilayots.findViewById(R.id.bottom_bar);
//获取对摄影机按钮的引用
mCameraButton=mUILayouts.findViewById(R.id.camera_按钮);
设置可见性(View.GONE);
favButton=(ImageButton)muilayots.findViewById(R.id.arcstarButton);
listview=(listview)mUILayouts.findViewById(R.id.favlist);
backButton=(ImageButton)mUILayouts.findViewById(R.id.backButton);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图参数视图){
//TODO自动生成的方法存根
完成();
}
});
setVisibility(View.GONE);
galleryList=SendFile.getFavorites();
如果(galleryList!=null){
gridviewAdapter=新的gridviewAdapter(ImageTargets.this);
setAdapter(gridviewAdapter);
}
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(galleryList!=null&&galleryList.size()>0){
if(listview.getVisibility()==View.GONE){
setVisibility(View.VISIBLE);
}否则{
setVisibility(View.GONE);
}
}否则{
Toast.makeText(ImageTargets.this,“收藏夹不喜欢”,
Toast.LENGTH_LONG).show();
}
}
});
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView参数AdapterView,
视图参数视图,整型位置,长参数(长){
setfavorite(galleryList.get(position));
意向意向=新意向(ImageTargets.this,
加载屏幕(类);
Bundle=新Bundle();
bundle.putInt(“x”,x_轴);
bundle.putInt(“y”,y_轴);
意向。额外支出(捆绑);
星触觉(意向);
完成();
}
});
showDialogHandler=新处理程序(){
公共无效handleMessage(消息消息消息){
字符串aResponse=msg.getData().getString(“消息”);
如果((null!=aResponse)){
//警报消息
Toast.makeText(getBaseContext(),
“服务器响应:”+aResponse,Toast.LENGTH\u SHORT)
.show();
显示警报对话框(aResponse);
}否则{
//警报消息
Toast.makeText(getBaseContext(),
“未从服务器获得响应。”,Toast.LENGTH\u SHORT)
.show();
}
};
};
loadingDialogHandler.CaptureButonContainer=mUILayouts
.findViewById(R.id.摄像头按钮);
mUILayouts.bringToFront();
}

它们使用处理程序显示布局

您可以在布局文件夹中的cameraoverlay布局中添加按钮,也可以在mainactivity中的Intar函数中初始化按钮。

步骤1:在camera_overlay.xml中添加按钮

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/camera_overlay_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <ProgressBar
        style="@android:style/Widget.ProgressBar"
        android:id="@+id/loading_indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="18dp"
        android:layout_marginTop="51dp"
        android:text="Button" />

 </RelativeLayout>
步骤3:修改ImageTargets.java类的initApplicationAR()函数

private static final String LOGTAG = "ImageTargets";
private Button b1;
private void initApplicationAR()
{
    // Create OpenGL ES view:
    int depthSize = 16;
    int stencilSize = 0;
    boolean translucent = Vuforia.requiresAlpha();

    mGlView = new SampleApplicationGLView(this);
    mGlView.init(translucent, depthSize, stencilSize);

    mRenderer = new ImageTargetRenderer(this, vuforiaAppSession);
    mRenderer.setTextures(mTextures);
    mGlView.setRenderer(mRenderer);

    b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            b1.setVisibility(View.GONE);
        }
    });

}

现在躺下来,看着你的按钮在点击后消失

虽然已经很久没有发帖了。。然而我发现了一篇文章。。在那里你可以得到想要的东西

参考:

解决方案:

步骤1:创建一个自定义布局XML文件(vuforia_widget_screen.XML)。例如,添加了一个按钮

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main_layout">

    <FrameLayout
        android:id="@+id/unity_player_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/back_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@null"
        android:text="@string/welcome" />
</FrameLayout>

->对于未来将面临这一问题的任何人来说:

你在java和原生android代码中使用Unity或normal eclipse?我在使用normal eclipse。那么你遇到了什么问题?实现它很简单!!我在imagetargets.java的oncreate中使用了setcontentview(),但按钮没有显示。可能在initApplication()函数中,您可以尝试添加Contentview。不要使用setcontentview。此处已存在一个视图,因此需要向现有视图添加更多视图。查看使用addContentView添加视图的代码。这样就可以了。您需要在创建相机预览后添加。我在initApplication()的末尾添加了java代码,但它不起作用。你能告诉我应该在哪个函数中添加java代码吗?我会让它变得简单。您的代码实现了mUILayout,用于显示loadi
setContentView(R.layout.vuforia_widget_screen);
FrameLayout frameLayout = findViewById(R.id.unity_player_layout);
frameLayout.addView(mUnityPlayer.getView());