我正在尝试实现一个增强现实应用程序,我们可以在背景中通过摄像机视图可视化元素。
我最大的困难是在我的应用程序中在后台显示相机。 屏幕上元素的内容,计算等......都是用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部件或相机部件,它将用于相应的视图。)
答案 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");
}