自從幾天以來,我就陷入了這個問題。我想要的僅僅是在屏幕上顯示相機的一部分。這就是我想要的:獲取相機的頂部部分
這是我做了什麼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="160dp"
android:scrollbars="none"
android:fillViewport="true"
>
<LinearLayout
android:id="@+id/linearLayoutBeautyContent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<SurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/surfaceViewBeautyCamera"/>
</LinearLayout>
</ScrollView>
<TextView
android:id="@+id/scanText"
android:text="Scanning..."
android:layout_height="wrap_content"
android:layout_width="match_parent">
</TextView>
</LinearLayout>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final LayoutInflater inflator = getLayoutInflater();
final LinearLayout inflate = (LinearLayout) inflator.inflate(R.layout.main, null);
final SurfaceView surfaceView = (SurfaceView) inflate.findViewById(R.id.surfaceViewBeautyCamera);
final SurfaceHolder holder = surfaceView.getHolder();
WindowManager mW = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
int screenWidth = mW.getDefaultDisplay().getWidth();
int screenHeight = mW.getDefaultDisplay().getHeight();
final ViewGroup.LayoutParams slayout = surfaceView.getLayoutParams();
slayout.width = screenWidth;
slayout.height = screenHeight;
surfaceView.requestLayout();
final ScrollView beautyContent = (ScrollView) inflate.findViewById(R.id.scrollView);
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = getCamera();
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (IOException e) {
Log.i("Lucy", e.getMessage());
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
addContentView(inflate, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
}
public Camera getCamera() {
try {
final Camera open = Camera.open();
return open;
} catch (Exception ex) {
Log.i("Lucy", ex.getMessage());
return null;
}
}
當我這樣做,我得到:
想法是設定SurfaceView的大小,全屏但減少滾動視圖的大小。但是我想要的是第一張圖片。我究竟做錯了什麼?
觀察:
當我完全滾動視圖。返回主屏幕並再次打開該應用程序。我得到第一個圖像。但如果我再次滾動並返回到主要回來,我得到第二個圖像。
任何其他策略?
PS: 1.有相機的頂部另一種觀點則也選擇,但我不能用它冗長的原因
幾個問題:1)爲什麼你不能使用'setContentView'? 2)爲什麼要在全屏中使用「SurfaceView」,但是「高度減少的ScrollView」?你想只顯示圖像的一部分,但能夠滾動它嗎? – mbmc 2014-09-09 05:26:25
1)我不能使用'setContentView',因爲我正在爲phonegap構建一個插件。我的觀點基本上會在瀏覽器之上。因此。 2)是。基本上我試圖把攝像機的feed放在scrollview中,並將scroller的高度限制爲200.這樣我只能看到feed的一部分。 – Jatin 2014-09-09 05:38:24
@InfiniteRecursion添加了方法 – Jatin 2014-09-09 09:09:37