2014-09-04 48 views
4

自從幾天以來,我就陷入了這個問題。我想要的僅僅是在屏幕上顯示相機的一部分。這就是我想要的:enter image description here獲取相機的頂部部分

這是我做了什麼:

<?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; 
    } 
} 

當我這樣做,我得到: enter image description here

想法是設定SurfaceView的大小,全屏但減少滾動視圖的大小。但是我想要的是第一張圖片。我究竟做錯了什麼?

觀察:

當我完全滾動視圖。返回主屏幕並再次打開該應用程序。我得到第一個圖像。但如果我再次滾動並返回到主要回來,我得到第二個圖像。

任何其他策略?

PS: 1.有相機的頂部另一種觀點則也選擇,但我不能用它冗長的原因

+0

幾個問題:1)爲什麼你不能使用'setContentView'? 2)爲什麼要在全屏中使用「SurfaceView」,但是「高度減少的ScrollView」?你想只顯示圖像的一部分,但能夠滾動它嗎? – mbmc 2014-09-09 05:26:25

+0

1)我不能使用'setContentView',因爲我正在爲phonegap構建一個插件。我的觀點基本上會在瀏覽器之上。因此。 2)是。基本上我試圖把攝像機的feed放在scrollview中,並將scroller的高度限制爲200.這樣我只能看到feed的一部分。 – Jatin 2014-09-09 05:38:24

+0

@InfiniteRecursion添加了方法 – Jatin 2014-09-09 09:09:37

回答

1

的問題是你的元素的高度設置: 你的根元素應該是一個相對佈局,然後可以設置攝像機視圖的固定高度,並將文本與文本設置爲高度匹配parent和layout_below滾動視圖。

+0

我試過了。沒有工作。你能提供一個更具體的說法嗎? – Jatin 2014-09-09 09:59:43

+0

你可以發佈你試過的代碼嗎,所以我可以檢查它。 – 2014-09-09 14:21:55

1

我不知道你爲什麼把surfaceView放在scrollView但是我忍受了你的佈局文件和它的作品,因爲你在預期的快照結果中顯示。

編輯:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <ScrollView 
      android:id="@+id/scrollView" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:fillViewport="true" 
      android:scrollbars="none" > 

      <LinearLayout 
       android:id="@+id/linearLayoutBeautyContent" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 

       <SurfaceView 
        android:id="@+id/surfaceViewBeautyCamera" 
        android:layout_width="match_parent" 
        android:layout_height="160dp" /> 
       <TextView 
        android:id="@+id/scanText" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:text="Scanning..." > 
       </TextView> 
      </LinearLayout> 
     </ScrollView> 
    </RelativeLayout> 
</LinearLayout> 
+0

我剛剛意識到這不是一個完整的答案。它有一個問題。文本視圖實際上在底部,因爲它應該在滾動下方。做'android:layout_below =「@ + id/scrollView」'沒有幫助。 – Jatin 2014-09-15 11:43:33

+0

就像你在圖像中顯示的那樣,它很難理解你希望textview不在攝像機視圖下面,而是在scrollview中。無論如何,您仍然可以將該textview放在具有修復維度的滾動視圖的子佈局中。請參閱編輯 – dhams 2014-09-16 03:12:03

+0

不。這個新的編輯根本不起作用。現在相機佔用全屏幕。 我的意思是滾動下的文字視圖,它應該在相機下面而不是在屏幕的底部。 – Jatin 2014-09-16 09:10:34

1

試試這個layout.But不明白爲什麼使用滾動視圖。

我張貼2佈局

第一個,其表面的意思是相機的臉是160dp

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/linearLayoutBeautyContent" 
    android:layout_width="fill_parent" 
    android:layout_height="160dp" 
    android:orientation="vertical" > 

    <SurfaceView 
     android:id="@+id/surfaceViewBeautyCamera" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 



    <TextView 
     android:id="@+id/scanText" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_below="@id/linearLayoutBeautyContent" 
     android:background="#000000" 
     android:text="Scanning..." > 
    </TextView> 

    </RelativeLayout> 

:第二個是,相機會捕捉全屏尺寸的圖片但你只能看到160在時間窗口的捕獲

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/linearLayoutBeautyContent" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentTop="true" 
    android:orientation="vertical" > 

    <SurfaceView 
     android:id="@+id/surfaceViewBeautyCamera" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

<TextView 
    android:id="@+id/scanText" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_marginTop="160dp" 
    android:background="#000000" 
    android:text="Scanning..." > 
</TextView> 

</RelativeLayout> 
+0

問題的答案是,'TextView'將佔據屏幕的其餘部分。我想要的是TextView是'wrap_content',屏幕的其餘部分是空的(基本上是在下面的圖層顯示,這也是我使用'addContentView'的原因) – Jatin 2014-09-15 05:33:17