相机活动背景的html / js内容

时间:2014-12-24 16:51:18

标签: javascript android cordova

我正在尝试实现一个增强现实应用程序,我们可以在背景中通过摄像机视图可视化元素。

我最大的困难是在我的应用程序中在后台显示相机。 屏幕上元素的内容,计算等......都是用javascript计算和显示的。

我想知道的是在Android中启动一个活动,在后台显示相机。这部分是完美的工作,所以没有问题。 现在我想在这个Android代码中调用一个html / js文件,并在活动中显示的相机上显示该文件的内容。

为此,我读过我们必须使用WebView来显示html / js文件的内容。 但我不知道如何在同一视图中显示android的布局和html / css的布局,并重新排列它们以在摄像机视图上显示html / js布局。

以下是相机预览的代码:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    //make the screen full screen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //remove the title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    mResultView=new ResultView(this);
    mPreview = new Preview(this);

    //set Content View as the preview
    setContentView(mPreview);
    //mPreview.setBackgroundColor(0);

    //add result view  to the content View
    addContentView(mResultView,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

    //set the orientation as landscape
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
}

如果我们只想显示html / js内容(这里可能还有另一种方法直接选择文件,而不是内部的代码,但我不知道...),我们写这个页面上简单的“Hello,WebView”:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    WebView webView = new WebView(mContext);
    setContentView(webView);
    webView.getSettings().setJavaScriptEnabled(true); //Yes you have to do it
    String customHtml = "<html><body><h1>Hello, WebView</h1><script>alert('bim');</script></body></html>";
    webView.loadData(customHtml, "text/html", "UTF-8");    
}

现在我只想以第二个显示第二个方式的方式组合这些视图。

非常感谢你的时间。

P.S:如果你知道另一个在javascript代码背景下实现相机视图的解决方案(我使用cordova),我将不胜感激!

修改 好的,如果我将这两段代码放在一起,我有:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    // just to remove the banner of the page
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    // --- WebView part --- //
    WebView webView = new WebView(mContext);
    setContentView(webView);
    addContentView(webView,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    webView.setBackgroundColor(0x00000000);
    webView.getSettings().setJavaScriptEnabled(true);
    String customHtml = "<html><body><h1>Hello, WebView</h1><script>alert('bim');</script></body></html>";
    webView.loadData(customHtml, "text/html", "UTF-8");


    // --- Camera part --- //
    //make the screen full screen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //remove the title bar
    //requestWindowFeature(Window.FEATURE_NO_TITLE);

    mResultView=new ResultView(this);
    mPreview = new Preview(this);

    //set Content View as the preview
    setContentView(mPreview);

    //add result view  to the content View
    addContentView(mResultView,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

    //set the orientation as landscape
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
}

现在我该如何处理这个问题(尤其是addContentView和setContentView,我猜...)才能正确地完成这项工作? (现在,使用此代码,应用程序崩溃。如果我删除WebView部件或相机部件,它将用于相应的视图。)

1 个答案:

答案 0 :(得分:0)

没关系,我终于找到了自己的解决方案,我只需要在背景中使用setContentView(这里是相机),并使用addContentView作为我想要的视图,我不喜欢不要忘记将此视图设置为透明:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    // just to remove the banner of the page
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    // --- Camera part --- //
    //make the screen full screen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //remove the title bar
    //requestWindowFeature(Window.FEATURE_NO_TITLE);

    mResultView=new ResultView(this);
    mPreview = new Preview(this);

    //set Content View as the preview
    setContentView(mPreview);

    //add result view  to the content View
    addContentView(mResultView,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

    //set the orientation as landscape
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 



    // --- WebView part --- //
    WebView webView = new WebView(mContext);
    //setContentView(webView);
    addContentView(webView,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    webView.setBackgroundColor(0x00000000);
    webView.getSettings().setJavaScriptEnabled(true);
    String customHtml = "<html><body><h1>Hello, WebView</h1></body></html>";
    webView.loadData(customHtml, "text/html", "UTF-8");
}