2013-08-19 10 views
5

Sono bloccato lì. Sto provando a mettere una vista trasparente su uno sfondo. Ho provato diversi metodi.Transparent View over ImageView

throught XML con:

android:background="@color/transparent" 

o

android:color="#80000000" 

o mettere un riferimento a color.xml file come così

<resources> 
    <color name="transp">#80000000</color> 
</resources> 

con la mia layout.xml come questo

android:background="@color/transp" 

Ho anche cercato di farlo da codice generato

myView.getBackground().setAlpha(45); 

o

myViewm.setBackgroundResource(R.color.trans); 

Ho visto alcuni commenti, ma nessuna delle risposte lavorato.

Inoltre, è ancora più strano che tutte queste soluzioni sembrino funzionare correttamente sul GraphicalLayout in Eclipse. Ma quando lancio il mio dispositivo, lo schermo non rimane trasparente. Ho disegnato una linea su quella vista per assicurarmi che qualcosa succeda; e la linea mostra.

qui è la mia layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    tools:context=".MainActivity" > 

     <ImageView 
     android:id="@+id/backgroundview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:src="@drawable/space_bg" 
     android:contentDescription="@string/desc" /> 

     <View 
     android:id="@+id/tileview"   
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/><!-- 
     android:background="@color/transp"/>--> 

</RelativeLayout> 

e il mio codice

private ImageView bg; 
    MyView tV; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     tV = new MyView(this); 

setContentView(tV); 

}

e la myView OnDraw

@Override 
    protected void onDraw(Canvas canvas)  
    { 

     super.onDraw(canvas); 
     this.setBackgroundResource(R.color.transp); 
     canvas.drawLine(10,20,30,40, paint); 

    } 

Così, dove sbaglio? Grazie !!!

risposta

9
android:background="@color/transparent" 

È possibile utilizzare il colore transparent previsto risorse Android:

android:background="@android:color/transparent" 

android:color="#80000000" 

<resources> 
    <color name="transp">#80000000</color> 
</resources> 

myViewm.setBackgroundResource(R.color.trans); 

Questo vi darà una tonalità molto scura di grigio. Il valore alfa di 80 è al massimo traslucido.


myView.getBackground().setAlpha(45); 

Non possono fare uso di questo in modo corretto.


private ImageView bg; 
MyView tV; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    tV = new MyView(this); 

    setContentView(tV); 
} 

Questo sostituisce fondamentalmente la View gonfiato da R.layout.activity_main (che contiene l'ImageView e altri widget) con MyView. Non penso che sia proprio quello che vuoi. Provare quanto segue:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    tools:context=".MainActivity" > 

    <ImageView 
     android:id="@+id/backgroundview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:src="@drawable/space_bg" 
     android:contentDescription="@string/desc" /> 

    <RelativeLayout 
     android:id="@+id/tileview"   
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@android:color/transparent" > 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/some_drawable_smaller_than_screen_size" 
      android:layout_centerInParent="true" /> 

    </RelativeLayout> 

</RelativeLayout> 

Come gonfiare questo xml:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.activity_main); 
} 

id="@+id/tileview" saranno trasparenti e più id="@+id/backgroundview".

+2

Uomo ... sei un genio generoso !!!! ... Questo f *** g funziona! Il mio errore è stato che volevo mettere una visione su un imageView? Perché non ha funzionato? E ora, se volessi tracciare delle linee su quella vista, potrei farlo per codice? – Antoine

+0

@Antoine Felice che abbia funzionato. "E ora, se volessi tracciare delle linee su quella vista, potrei farlo per codice?" << Dovrai essere più specifico di così. Vuoi disegnare alcune linee che sono predefinite rispetto a ImageView (nel senso che appaiono all'avvio dell'attività)? Oppure, vuoi disegnare il freestyle (usando gli eventi touch) quando la tua app è in esecuzione? – Vikram

+1

Scusate, per essere vaghi ... Vorrei disegnare alcune linee visualizzate non appena inizia l'attività, piastrelle in realtà con alcuni ascoltatori di eventi. E qualche spiegazione sul perché la mia soluzione non ha funzionato? – Antoine