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>
Emkey
źródło

Odpowiedzi:

322

Spróbuj tego

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

Sprawdź funkcje setBackground w dokumentacji RelativeLayout

Maragues
źródło
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.

Adam Stelmaszczyk
źródło
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)

Suraj Bajaj
źródło
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); 
Adnan Abdollah Zaki
źródło
4

Wypróbowuję ten kod na Androidzie 4+ :

view.setBackgroundDrawable(0);
Salman666
źródło
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.

Mahmudul
źródło
1

Ta praca dla mnie:

yourview.setBackground(null);
lscofield
źródło
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.

anand krish
źródło
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);
Đorđe Nilović
źródło
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.

Jeel Shah
źródło
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
SRam
źródło
Co to jest? Po co?
CoolMind