2016-04-12 2 views
0

Я пытаюсь создать округлую форму поверхности. Я много искал, но не нашел хорошего решения. то, что я делаю прямо сейчас, это то, что я поместил SurfaceView в FrameLayout, затем другой вид поверх него, либо с PNG-маской, либо с возможностью рисования xml. здесьКак сделать закругленный обзор поверхности

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="140dp" 
     android:layout_height="140dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="#000" 
     android:orientation="vertical" 
     android:visibility="visible" > 

     <FrameLayout 
      android:id="@+id/videorecordview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      android:layout_weight=".2" > 

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

    <LinearLayout 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="@drawable/rounded" 
     android:orientation="vertical" > 
    </LinearLayout> 

</RelativeLayout> 

Но это нехорошее решение, и оно также не работает отлично. Я хочу настроить поверхность на округлую форму. Любая помощь приветствуется. Спасибо :)

+0

Http: //stackoverflow.com/questions/26074784/how-to-make-a-view-in-android-with-rounded-corners ... попробуйте это ... Измените FrameLayout на SurfaceView –

+0

Благодарим за участие. @sunilsunny вы можете сделать любое закругление, используя этот, но не поверхностный вид. Я уже пробовал это :) –

+0

@TashenJazbi: Вы нашли решение для этого? Я придерживаюсь той же проблемы с реализацией. Можете ли вы отправить свое решение? Спасибо – Neha

ответ

3

Вы не можете изменить форму поверхности в SurfaceView в.

A SurfaceView имеет две части: поверхность и вид. Часть View работает как любой другой вид. По умолчанию он просто выступает как прозрачная «дыра», создавая окно в макете. Все представления отображаются приложением на одном уровне.

Поверхность - это отдельный слой, который находится за слоем «Вид» (если вы явно не изменяете порядок Z поверхности), поэтому вы видите его только там, где он «просматривает» прозрачные области слоя «Вид». Вы можете нарисовать слой «Вид», чтобы замаскировать части поверхности, но вы не можете изменить форму самого поверхностного слоя. Слои прямоугольные.

Во многих ситуациях вместо SurfaceView может использоваться TextureView. TextureView предлагает большую гибкость, поскольку он отображается приложением на уровне представления, но может быть менее эффективным, чем SurfaceView.

Дополнительную информацию можно найти на Android graphics architecture doc.

+0

Ваш ответ звучит разумно, чтобы принять его как правильный ответ. Благодарим за Ваше участие :) –

0

попробовать это

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > 
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" 
     android:angle="270"/> 
</shape> 



<SurfaceView 
     android:background="@drawable/circle" 
     android:id="@+id/surfaceView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
+0

это не повлияет на SurfaceView. Я уже пробовал это :) –

1

Немного взломать. Поместите вид вашей поверхности внутри карты.

<android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/margin_normal" 
     app:cardCornerRadius="10dp"  
     app:cardPreventCornerOverlap="false"> 

     <SurfaceView 
      android:id="@+id/surfaceView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="@dimen/margin_normal" /> 

    </android.support.v7.widget.CardView> 

Не забудьте добавить это в ваш файл Gradle использовать CardView

compile 'com.android.support:cardview-v7:25.0.1' 

Кроме того, это две линии вид внутри карты

app:cardCornerRadius="10dp"  
app:cardPreventCornerOverlap="false" 

Приветствия счастливого кодирования

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