2012-03-04 7 views
10

को घुमाने के लिए सेट किया गया है, मेरे पास एक पूर्ण स्क्रीन पर एक glsurface है। एक बटन के क्लिक पर मैं एक और लेआउट दिखाना चाहता हूं (सेटिंग्स का प्रकार)। अगर मैं ओवरले के दृश्यमान होने से शुरू करता हूं, तो मैं इसे अदृश्य बना सकता हूं और फिर बिना किसी समस्या के फिर से दिखाई दे सकता हूं। लेकिन अगर मैं इसे अदृश्य के साथ शुरू करता हूं, तो मैं इसे फिर कभी दिखाई नहीं दे सकता। कोड निम्नानुसार है:एंड्रॉइड सेट दृश्यता प्रदर्शित नहीं होती है अगर प्रारंभ में

<?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 से संबंधित है। यदि मैं एक सामान्य सतहदृश्य के साथ glsurface को प्रतिस्थापित करता हूं तो यह ठीक काम करता है। – user1248322

+0

अधिक जानकारी: यदि मैंने ग्लासफ़ेस को GONE पर सेट किया है, तो दृश्य को लेआउट सेट करें, फिर glsurface को वापस विज़िबल पर सेट करें - यह काम करता है। लेकिन ... अगर मैंने गन्स के बजाय ग्लिसफ्रस को अविश्वसनीय रूप से सेट किया है - यह काम नहीं करता है। – user1248322

+0

ठीक है - एपीआई डेमो में surface_view_overlay ठीक वही करता है जो मैं ढूंढ रहा हूं - मैं देख रहा हूं कि मैं कहां गलत हुआ और फिर पोस्ट कर रहा हूं। यूआई थ्रेड पर – user1248322

उत्तर

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

1

मैं तीन स्वतंत्र चीजों की कोशिश करने का सुझाव दूंगा।

  1. सामग्री को लपेटने के लिए लेआउट चौड़ाई और ऊंचाई बदलना क्योंकि यह माता-पिता से मेल खाने में कोई समस्या हो सकती है।
  2. दृश्य
  3. एक FrameLayout में SurfaceView रैपिंग पर bringToFront कॉलिंग (इस # 2 से संबंधित है, लेकिन यह अभी भी मदद कर सकता है)
+0

धन्यवाद - लेकिन उनमें से कोई भी कोई फर्क नहीं पड़ता। – user1248322

+0

क्या आप जानते हैं कि रेंडर थ्रेड चल रहा है या सतह पर भी शुरू हो रहा है? – BeatingToADifferentRobot

+0

हां - 3 डी सही ढंग से स्पर्श करने और प्रस्तुत करने का जवाब देता है (मैंने दोनों को लगातार प्रस्तुत करने की कोशिश की है और गंदे होने पर प्रस्तुत करना - कोई फर्क नहीं पड़ता) – user1248322

-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

धन्यवाद आदमी, यह मेरी समस्या हल! मैं कॉलबैक में दृश्यता स्थापित कर रहा था, और मुझे नहीं पता था कि दृश्य तुरंत अपडेट क्यों नहीं किया गया था, लेकिन अब यह काम करता है। ऐसा लगता है कि मुझे यूआई धागे पर काम करने की ज़रूरत है .. – Jack

2

मेरे मामले में, एक सादे SurfaceView साथ, मैं सिर्फ एक्सएमएल में चला गया, अदृश्य नहीं करने के लिए देखें निर्धारित किया है। फिर मैं इसके बाद सहीता को सेट कर सकता हूं।

+0

इसने मेरी समस्या हल की! धन्यवाद! :) – acegs

-2

बस "match_parent" के बजाय गुणों की चौड़ाई और ऊंचाई को "fill_parent" पर सेट करें। सभी बच्चों के लिए दृश्यता निर्धारित करने की आवश्यकता नहीं है, लेकिन केवल उच्च स्तर के कंटेनर/तत्व के लिए।