Italian trasparenze in imageview con .png

fabio_linate_milano

Member
Licensed User
Longtime User
Salve a tutti

Sono un utente alle prime armi (un newbie come si direbbe), appassionato di elettronica vorrei usare B4A per interfacciare dispositivi embedded!? Ma prima, per imparare, sto facendo degli esempi per costruire delle interfacce carine.
Il mio problema sarebbe questo: dentro una imageview c'è una immagine in formato .png che quindi supporta la trasparenza, voglio cambiare il colore dello sfondo in modo tale che si sostituisca alla trasparenza.
Se lo faccio cambiando la proprietà color di activity funziona perfettamente, mentre se lo faccio cambiando la proprietà color dell'imageview NO (appare l'imageview del colore impostato su tutta l'area non solo la trasparenza)
il frammento di codice (molto semplice) è:

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("layout")

figura.Gravity = Gravity.CENTER
'figura.Color = Colors.White
figura.Bitmap = LoadBitmap(File.DirAssets, "Mask-woman-icon.png")
Activity.Color = Colors.White

End Sub


l'imageview è definita staticamente dentro il layout mentre l'immagine è caricata dinamicamente, ma (ho provato) nulla cambia definendo l'immagine dentro il layout oppure creando tutto dinamicamente.
Qualche idea, suggerimento per risolvere la cosa

grazie
fabio milano
 

fabio_linate_milano

Member
Licensed User
Longtime User
Ciao

grazie per la risposta

ho provato ma non funziona
viene dato il seguente errore di compilazione:

Parsing code. 0.00
Compiling code. 0.22
Compiling layouts code. 0.00
Generating R file. 0.25
Compiling generated Java code. Error
B4A line: 45

figura.Background = Colors.White
javac 1.7.0_03
src\b4a\example\main.java:246: error: inconvertible types
mostCurrent._figura.setBackground((android.graphics.drawable.Drawable)(anywheresoftware.b4a.keywords.Common.Colors.White));
^
required: Drawable
found: int
1 error


fabio
 

ivanomonti

Expert
Licensed User
Longtime User
sembra una limitazione ho fatto dei test ma stesso tuo risultato, dovresti sormontare due oggetti uno colorato e uno con la pict
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Ciao

Perdonate il mio google italiano :oops:

Un ImageView se metti un'immagine con uno sfondo trasparente, afferrare la parte inferiore sotto l'immagine, non di una stessa immagine.

D'altra parte si è confuso per assegnare il colore nella seconda parte:

figura.Background = Colors.White

Lo sfondo è un altro modo per caricare una immagine, non il colore di sfondo.

Sono disponibili due opzioni:

1) Creare l'immagine con il colore di sfondo che si desidera in JPG

2) creare un piccolo pannello sotto l'immagine e mettete il colore di sfondo che si desidera. L'immagine che pannello "Parent".

saluti:
 

ivanomonti

Expert
Licensed User
Longtime User
Oggi mi sono dilettato e ti ho creato una libreria IMLibrary 1.0 che ti posto qui vedi se fa il caso tuo, se hai bisogno di modifiche dimmelo, nel frattempo includo altre nuove classi ;-)

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region
 
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
 
Sub Process_Globals
End Sub
 
Sub Globals
    Dim imb As ClassMyButton
    Dim Panel1 As Panel
End Sub
 
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Main")
    imb.Initialize
End Sub
 
Sub Activity_Resume
    Dim bmp As Bitmap
    bmp.Initialize(File.DirAssets,"icon256x256.png")
    imb.newButton(Panel1,bmp,10,255,0,0)
End Sub
 
Sub Activity_Pause (UserClosed As Boolean)
 
End Sub
 

Attachments

  • IMLibrary 1.0.zip
    2.9 KB · Views: 173

fabio_linate_milano

Member
Licensed User
Longtime User
Grazie
è un po' tardi volevo scrivere una risposta domani ma visto che ci sono scrivo due righe adesso.
In primo luogo l'idea di sormontare due oggetti in effetti funziona, oggi pomeriggio avevo fatto qualche prova mettendo un imageview dentro un panel e cambiando il colore del panel vengono rispettate le trasparenze del png senza problemi.
La libreria l'ho appena provata ma non sono riuscito a farla funzionare, ma è meglio se continuo a scrivere domani

fabio
 

ivanomonti

Expert
Licensed User
Longtime User
La libreria usa un metodo graphic dell'object stesso (panel) che mi permette di creare un fondo e appiccicare l'immagine png

B4X:
imb.newButton(Panel1,bmp,10,255,0,0)

  1. Panel1 = panel
  2. bmp = bitmap png
  3. 10 = alfa
  4. 255 = red
  5. 0 = green
  6. 0 = blue
In questo modo puoi sempre cambiare colore e intensità dello stesso, ovvio che questa libreria è ancora acerba, manca label per il testo del bottone ed altro ancora, ma nel giro di poco la perfeziono.

Qui hai un esempio completo banale (sorgente)
 

Attachments

  • ClockButton.zip
    336.7 KB · Views: 214
  • clockscreen.png
    clockscreen.png
    14.1 KB · Views: 213

fabio_linate_milano

Member
Licensed User
Longtime User
Grazie ancora

comunque non riesco a farlo girare quest'ultimo esempio.
La libreria è installata ok: copiati i 2 file jar e xml nella dir delle librerie di B4A e d'altra parte è presente nel riquadro libs non ci sono errori di compilazione ma in esecuzione dice "il programma B4A Example è stato arrestato"

fabio
 

ivanomonti

Expert
Licensed User
Longtime User
strano davvero, ha me va benissimo mmmmm mancano dei riferimenti, hai provato su emulatore... contattami che vediamo di risolvere.
 

fabio_linate_milano

Member
Licensed User
Longtime User
grazie per l'interessamento

Io uso B4A bridge su un tablet da 7'', l'emulatore è molto lento (sicuramente sbaglio io cerchero' di capire il motivo).
Questa mia necessità di gestire le immagini con la trasparenza nasce da una idea.
L'idea è questa. Nella documentation ci sono molti esempi di table scroll view anche molto belli, la mia idea è quella di poter usare una o + colonne con della grafica (cose semplice ad esempio una croce rossa per indicare indisponibilita piuttosto che una segno di spunta verde ...) per farlo è necessario che la trasparenza venga rispettata per il discorso di evidenziare la riga corrente.
Mettere un panel e dentro un imageview va bene, ma se si potesse gestire tutto con la sola imageview sarebbe meglio!
Non si può giocare con la proprietà background? non ho capito a cosa serve se cerco di caricare un'immagine con
iv.background = loadbitmap( )
mi da' errore

fabio milano
 

ivanomonti

Expert
Licensed User
Longtime User
per caricare immagine e cosi il tuo invece e per mettere il colore.

B4X:
ImageView01.SetBackgroundImage(LoadBitmap(File.DirAssets,"Camera-01.png"))
 
Top