2015-09-11 8 views
1

У меня все так же, как в этом примере в https://github.com/googlesamples/android-vision/tree/master/visionSamples/multi-tracker, кроме моей макете деятельности заключается в следующем:View не заполняет весь экран

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/topLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:keepScreenOn="true" 
    android:weightSum="100" 
    android:orientation="horizontal"> 

    <be.citylife.communitypurchaseapp.view.camera.CameraSourcePreview 
     android:id="@+id/preview" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="60"> 

     <be.citylife.communitypurchaseapp.view.camera.GraphicOverlay 
      android:id="@+id/overlay" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

    </be.citylife.communitypurchaseapp.view.camera.CameraSourcePreview> 

    <FrameLayout 
     android:id="@+id/sideContainer" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="40"/> 

</LinearLayout> 

Мой планшет в альбомной, и я хочу, чтобы cameraPreviewSource является всегда слева и заполняет весь экран по высоте, а затем сразу же у меня есть фрагмент, который заполняет остальные.

Этот макет работает, за исключением того, что мой предварительный источник не заполняет всю высоту. На нем есть черный баннер. Даже моя ширина на самом деле меньше, чем я хочу, чтобы вы можете увидеть это на скриншоте:

http://i61.tinypic.com/vctmw0.png

Я играл с CameraSourcePreview с шириной и высотой в функции OnLayout, но это не помогает. На предварительном просмотре я знаю, что он заполняет экран в нижней части экрана, но на планшете это не так.

enter image description here lp.

Кто-нибудь знает, как это решить?

EDIT:

Я думаю, что это что-то делать с этим:

@Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     int width = 320; 
     int height = 240; 
     if (mCameraSource != null) { 
      Size size = mCameraSource.getPreviewSize(); 
      if (size != null) { 
       width = size.getWidth(); 
       height = size.getHeight(); 
      } 
     } 

     // Swap width and height sizes when in portrait, since it will be rotated 90 degrees 
     if (isPortraitMode()) { 
      int tmp = width; 
      width = height; 
      height = tmp; 
     } 

     final int layoutWidth = right - left; 
     final int layoutHeight = bottom - top; 

     // Computes height and width for potentially doing fit width. 
     int childWidth = layoutWidth; 
     int childHeight = (int)(((float) layoutWidth/(float) width) * height); 

     // If height is too tall using fit width, does fit height instead. 
     if (childHeight > layoutHeight) { 
      childHeight = layoutHeight; 
      childWidth = (int)(((float) layoutHeight/(float) height) * width); 
     } 

     for (int i = 0; i < getChildCount(); ++i) { 
      getChildAt(i).layout(0, 0, childWidth, childHeight); 
     } 

     try { 
      startIfReady(); 
     } catch (IOException e) { 
      Log.e(TAG, "Could not start camera source.", e); 
     } 
    } 

Это OnLayout метод от CameraSourcePreview.

+0

У меня есть такая же проблема, часть изображения черная, когда камера включена. Вы нашли какое-либо решение для этого? – LucasJJ

ответ

0

enter image description here

, который должен поставить его в полноэкранный режим: D Есть куча других режимов, которые можно выбрать из. Если это не работает, удалить автоматически генерируемый

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 




/** gets called when a Menu.onClick happens 
* 
* @param item the ID of the clicked Item 
*/ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     //TODO 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 
+0

Но это не помогает решить мою проблему. Проблема в самом устройстве. – user1007522

0

Вероятно, что-то делать с соотношением сторон камеры и как он втягивает в свой контейнер.

Если используемый предварительный просмотр камеры поддерживает соотношение сторон и подходит для предварительного просмотра в контейнер, то вы обязательно получите черные полосы. Это связано с тем, что большинство датчиков камер создают изображения, которые предназначены для размещения в пространстве относительно 1920x1080 пикселей (или в формате 16: 9).

Что вам нужно, это дополнительное пространство на сторонах, которое нужно скрыть, и чтобы предварительный просмотр заполнился по высоте. То есть, если вы не возражаете против того, чтобы ваш образ был скрыт от пользователя при предварительном просмотре. Возможно, это невозможно сделать непосредственно с видом, который вы используете, но он должен быть относительно простым, если вы поместите свой объект в другой контейнер макета.

Надеюсь, это поможет!

+0

Так что мне нужно обернуть мой макет другим макетом в xml для этого? Или что вы имеете в виду? – user1007522

5

Комментарий или удаление ниже строк из CameraSourcePreview, и все должно быть хорошо. У меня была такая же проблема, как и вы, и теперь она решена.

if (childHeight > layoutHeight) { 
    childHeight = layoutHeight; 
    childWidth = (int)(((float) layoutHeight/(float) height) * width); 
} 
+0

Работает для меня!Не уверен, есть ли какие-либо последствия для этого, но будет использовать сейчас – MobileMon

+0

Высота камеры накрахмалена. у любого есть решение? –

Смежные вопросы