2013-08-19 6 views
5

Jestem tam zablokowany. Próbuję umieścić przezroczysty widok na tle. Próbowałem już kilku metod.Przezroczysty widok na ImageView

throught XML z:

android:background="@color/transparent" 

lub

android:color="#80000000" 

lub oddanie odniesienie do color.xml plik jako tak

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

z moim layout.xml jak ten

android:background="@color/transp" 

Próbowałem też zrobić to przez wygenerowanego kodu

myView.getBackground().setAlpha(45); 

lub

myViewm.setBackgroundResource(R.color.trans); 

Widziałem kilka stanowisk związanych, ale żadna z odpowiedzi nie pracował.

Poza tym jest jeszcze dziwniejsze, że wszystkie te rozwiązania wydają się łamać dobrze na GraphicalLayout w Eclipse. Po uruchomieniu urządzenia ekran pozostaje jednak nieprzejrzysty. Narysowałem linię na tym widoku, aby upewnić się, że coś się dzieje; i linia się pokazuje.

tutaj jest mój 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> 

i mój kod

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); 

}

i myView OnDraw

@Override 
    protected void onDraw(Canvas canvas)  
    { 

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

    } 

Więc, gdzie nie mam racji? Dzięki!

Odpowiedz

9
android:background="@color/transparent" 

Można użyć koloru transparent przewidzianego w android zasobów:

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

android:color="#80000000" 

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

myViewm.setBackgroundResource(R.color.trans); 

to daje bardzo ciemny odcień szarości. Wartość Alfa wynosząca 80 jest w najlepszym przypadku przeświecająca.


myView.getBackground().setAlpha(45); 

Nie możesz używać tego poprawnie.


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); 
} 

Zasadniczo zastępuje View pompowana z R.layout.activity_main (zawierającego ImageView i innych elementów) z MyView. Nie sądzę, żeby to było dokładnie to, czego chcesz. Spróbuj wykonać następujące czynności:

<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> 

Jak nadmuchać ten 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" będzie przejrzysta i ponad id="@+id/backgroundview".

+2

Człowieku ... jesteś hojny, genialny !!!! ... Ten f *** g działa! Mój błąd polegał na tym, że chciałem pokazać widok obrazu? Dlaczego to nie zadziałało? A teraz, gdybym chciał narysować kilka linii nad tym widokiem, czy mógłbym to zrobić za pomocą kodu? – Antoine

+0

@Antoine Cieszę się, że to się udało. - A teraz, gdybym chciał narysować kilka linii nad tym widokiem, czy mógłbym to zrobić za pomocą kodu? << Musisz być bardziej konkretny. Czy chcesz narysować kilka linii, które są wstępnie zdefiniowane w ImageView (co oznacza: pojawiają się, gdy zaczyna się aktywność)? A może chcesz narysować styl dowolny (używając zdarzeń dotykowych), gdy aplikacja jest uruchomiona? – Vikram

+1

Przepraszam, za bycie nieprecyzyjnym ... Chciałbym narysować kilka linii zaraz po rozpoczęciu aktywności, płytki faktycznie z niektórymi słuchaczami zdarzeń. I jakiekolwiek wyjaśnienie, dlaczego moje własne rozwiązanie nie działa? – Antoine