Usuń programowo tło do rysowania w systemie Android


132

Chcę @drawable/bgprogramowo usunąć tło do rysowania . Czy jest na to sposób?

Obecnie mam następujący kod XML w moim układzie:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/widget29"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/bg">

</RelativeLayout>

Odpowiedzi:


322

Spróbuj tego

RelativeLayout relative = (RelativeLayout) findViewById(R.id.widget29);
relative.setBackgroundResource(0);

Sprawdź funkcje setBackground w dokumentacji RelativeLayout


4
Otrzymuję ten błąd: Metoda setBackgroundResource (int) w typie View nie ma zastosowania dla argumentów (null)
UKDataGeek

2
Jeśli to nie zadziała: sprawdź, czy użyłeś właściwości background, a nie android: src!
Chris Conway,

3
Funkcja setBackgroundDrawable jest teraz przestarzała. Odpowiedź @ Suraj poniżej jest teraz lepsza.
Anand Sainath

6
api 16? czy jest coś dla API 8?
user1940676

1
Użyj setBackgroundResource (0). jak odpowiedział @AdamStelmaszczyk. ,
AndroidGeek,

72

setBackgroundResource(0)to najlepsza opcja. Z dokumentacji :

Ustaw tło dla danego zasobu. Zasób powinien odnosić się do obiektu do rysowania lub 0, aby usunąć tło .

Działa wszędzie, ponieważ jest od API 1.

setBackgroundzostał dodany znacznie później, w API 16, więc nie będzie działać, jeśli masz minSdkVersionmniej niż 16.


2
Dziękuję, całkowicie mnie uratowałeś po 4 godzinach headbangingu. Jest to bardzo przydatne w przypadku, gdy dynamicznie tworzysz przycisk przełączany (do wyboru 2 elementy do rysowania) w zdarzeniu onClick, ale potrzebujesz widocznego przycisku, który będzie wyświetlany, zanim przełączone zostaną przejęte (ponieważ nic nie będzie wyświetlane, dopóki nie nastąpi kliknięcie, więc kiedy to się stanie tak, możesz użyć, setBackgroundResource(0)aby usunąć swój wcześniejszy przycisk „set” do rysowania).
Azurespot

2
To powinna być wybrana odpowiedź, ponieważ jest to najlepsze rozwiązanie zarówno pod względem zarządzania pamięcią, jak i obsługi poziomu interfejsu API.
gregtczap

47

Pomogło mi to usunąć kolor tła, mam nadzieję, że komuś pomoże. setBackgroundColor(Color.TRANSPARENT)


3
Obiekty do rysowania mogą mieć wypełnienie, więc jeśli usuniesz tło, musisz również usunąć wypełnienie.
Michał Kisiel

1
setBackgroundResource (0) jest najlepszą opcją, ponieważ całkowicie usuwa tło, zmniejszając w ten sposób przerysowanie.
Mediolan

5

Wypróbuj ten kod:

imgView.setImageResource(android.R.color.transparent); 

też ten działa:

imgView.setImageResource(0); 

ale uważaj, ten nie działa:

imgView.setImageResource(null); 

4

Wypróbowuję ten kod na Androidzie 4+ :

view.setBackgroundDrawable(0);

Metoda setBackgroundDrawable (Drawable) w typie View nie ma zastosowania dla argumentów (int)
Tobrun

2

Najlepsza wydajność tej metody:

imageview.setBackgroundResource(R.drawable.location_light_green);

Użyj tego.



0

Użyj, setBackgroundColor(Color.TRANSPARENT)aby ustawić przezroczyste tło lub użyj setBackgroundColor(0). Oto Color.TRANSPARENTdomyślny atrybut z klasy koloru. Będzie działać dobrze.


0

Mam scenariusz przypadku i wypróbowałem wszystkie odpowiedzi z góry, ale zawsze nowy obraz był tworzony na starym. Rozwiązanie, które zadziałało dla mnie to:

imageView.setImageResource(R.drawable.image);

0

Oprócz doskonałych odpowiedzi, jeśli chcesz to osiągnąć za pomocą XML, możesz dodać:

android:background="@android:color/transparent

do twojego widoku.


0

Najpierw musisz napisać w układzie XML:

android:visibility="invisible" <!--or set VISIBLE-->

następnie użyj tego, aby pokazać to za pomocą Java:

myimage.setVisibility(SHOW); //HIDE

Co to jest? Po co?
CoolMind
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.