2012-03-04 26 views
10

我有一個佔用全屏的gsurface。點擊一個按鈕後,我希望顯示另一個佈局(設置類型的東西)。如果我首先看到疊加層,那麼我可以將其隱藏起來,然後再次可見並沒有問題。但是如果我從無形開始,我不能再讓它看不見。代碼如下:如果最初設置爲不可見,則android setVisibility不會顯示

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

    <android.opengl.GLSurfaceView 
    android:id="@+id/glPlaySurface" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.opengl.GLSurfaceView> 

<RadioGroup 
    android:id="@+id/radioGroup1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:orientation="horizontal" > 

    <RadioButton 
     android:id="@+id/btnRotate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:checked="true" 
     android:text="R" 
     android:textColor="#000" /> 

    <RadioButton 
     android:id="@+id/btnPan" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="15dp" 
     android:text="P" 
     android:textColor="#000" /> 
</RadioGroup> 

<Button 
    android:id="@+id/btnLights" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_marginLeft="15dp" 
    android:layout_toRightOf="@+id/radioGroup1" 
    android:text="Lights" /> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layoutLights" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:visibility="visible" <--- Does not work if set to invisible 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 

    android:background="#fff" > 

    <Button 
    android:id="@+id/btnLightsOK" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="15dp" 
    android:text="OK" /> 

    <Button 
    android:id="@+id/btnLights" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="15dp" 
    android:text="OK" /> 

</RelativeLayout> 

</RelativeLayout> 


private OnClickListener mOnLightsClick = new OnClickListener() { 
    public void onClick(View arg0) { 
     if(mLayoutLights.getVisibility() == View.VISIBLE) { 
      mLayoutLights.setVisibility(View.INVISIBLE); 
     } 
     else { 
      mLayoutLights.setVisibility(View.VISIBLE); 
     } 
    } 
}; 
+0

問題與glsurface有關。如果我用普通的surfaceview替換glsurface,它可以正常工作。 – user1248322 2012-03-04 19:18:00

+0

更多信息:如果我將glsurface設置爲GONE,將佈局設置爲VISIBLE,然後將glsurface設置爲VISIBLE - 它可以工作。但是...如果我將表面設置爲INVISIBLE而不是GONE - 它不起作用。 – user1248322 2012-03-05 00:22:35

+0

好的 - api演示中的surface_view_overlay完全符合我的要求 - 我會看到我出錯的地方,然後發佈。 – user1248322 2012-03-05 01:19:32

回答

10

明白了。您必須設置佈局中所有項目的可見性,而不僅僅是佈局。所以這個代碼工作:

if (mLayoutLights.getVisibility() == View.VISIBLE) { 
    ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.GONE); 
((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.GONE); 
mLayoutLights.setVisibility(View.GONE); 
} else { 
    mLayoutLights.setVisibility(View.VISIBLE); 
((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.VISIBLE); 
((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.VISIBLE); 
} 
+1

謝謝你,我有同樣的問題。 – Enrichman 2013-05-21 13:34:04

1

我會建議嘗試三個獨立的事情。

  1. 更改佈局寬度和高度以包裝內容,因爲它可能是匹配父級的問題。
  2. 在視圖
  3. 結束語中的FrameLayout的surfaceView調用bringToFront(這是關係到#2,但它仍可能幫助)
+0

謝謝 - 但沒有一個有所作爲。 – user1248322 2012-03-04 17:53:10

+0

你知道渲染線程是否正在運行,甚至是從表面開始? – BeatingToADifferentRobot 2012-03-04 18:10:09

+0

是的 - 三維響應觸摸和正確渲染(我已經試過連續渲染和渲染時髒 - 沒有區別) – user1248322 2012-03-04 18:35:29

-3
case R.id.title_call_button: 
if(llButtonCallNow.getVisibility() != View.VISIBLE){ 
llButtonCallNow.setVisibility(View.VISIBLE); 
} 
    else{ 
    llButtonCallNow.setVisibility(View.GONE); 
    Toast.makeText(getBaseContext(), ("Im here baby :)"), 
    Toast.LENGTH_SHORT).show(); 

    } 
break; 
14

過類似的錯誤,但它是因爲我沒有使用UiThread的愚蠢的錯誤。

Activity act = (Activity)context; 
act.runOnUiThread(new Runnable(){ 
@Override 
public void run() { 
    mLayoutLights.setVisibility(View.VISIBLE); 
} }); 
+1

謝謝大家,它解決了我的問題!我在回調中設置了可見性,並不知道爲什麼視圖沒有立即更新,但現在它可以工作。似乎我需要在UI線程上工作.. – Jack 2016-12-24 11:46:44

2

在我的情況下,用普通的SurfaceView,我只是將視圖設置爲xml而不是INVISIBLE。之後我可以正確設置VISIBILITY。

+0

這解決了我的問題!謝謝! :) – acegs 2016-07-29 09:58:52

-2

只需將屬性的寬度和高度設置爲「fill_parent」而不是「match_parent」即可。不需要爲所有孩子設置可見性,而只需要爲更高級別的容器/元素設置可見性。

相關問題