Italian Chiacchiericci

Star-Dust

Expert
Licensed User
Longtime User
Ho notato una cosa molto anomala con la XUI.
Io chiamo più volte questa sub per ridisegnare un immagine. Ogni volta che la chiamo la sub disegna l'immagine modificandola con i nuovi paramentri.

Ad esempio una sub così:
B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private PanelMain As B4XView
    Dim xui As XUI 'ignore
End Sub

Private Sub Draw
    PanelMain.RemoveAllViews ' Senza questo il Canvas non disegna nulla, disegna solo la prima volta.
    Dim Can As B4XCanvas
    Can.Initialize(PanelMain)
    Can.DrawCircle(PanelMain.Width/2, PanelMain.Heght/2,rnd(50,200)*1dip,xui.Color_Red,True,1dip)
End Sub

Se io non inserissi questo istruzione
B4X:
PanelB4XView.RemoveAllView
Il canvas non da nessun risultato, l'immagine rimane quella precedente.
Quasi come se l'immagine generate precedentemente dal canvas fosse come un secondo pannello agganciato sopra.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Suppongo che dato che crei un canvas ogni volta, questi vengano sovrapposti. Sto (mentre tento di ridere con Maurizio Batista) guardando un sorgente di Erel; usa un solo canvas e poi "giostra" con TargetRect, ClearRect, ClipPath, RemoveClip.

Però non sto seguendo nemmeno ciò che sto scrivendo io stesso :D

Magari più tardi leggerò qualcosa in più.
 

Star-Dust

Expert
Licensed User
Longtime User
Suppongo che dato che crei un canvas ogni volta, questi vengano sovrapposti. Sto (mentre tento di ridere con Maurizio Batista) guardando un sorgente di Erel; usa un solo canvas e poi "giostra" con TargetRect, ClearRect, ClipPath, RemoveClip.

Però non sto seguendo nemmeno ciò che sto scrivendo io stesso :D

Magari più tardi leggerò qualcosa in più.
B4XCavas non è una vista. Dovrebbe modificare il BitmapDrawer del background della vista

Poi e un difetto di B4Xcanvas mentre cavas funziona normalmente
 

Star-Dust

Expert
Licensed User
Longtime User
Qui non parliamo di sorgenti, non sto cercando una soluzione. La soluzione e B4XView.RemoveAllView.

Il punto è: perché questa anomalia?
Il comportamento normale è quello del cavas.

Quindi penso che Erel nel rendere compatibile a tutte le piattaforme il B4Xcanvas, stia usando un altro pannello attaccato alla vista per poter disegnare un cavas
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Qui non parliamo di sorgenti, non sto cercando una soluzione. La soluzione e B4Xcanvas.RemoveAllView.
Suppongo sia un lapsus (dovuto a stanchezza!!!); pnl.RemoveAllViews, non canvas.

Non ho trafficato granché nemmeno con i nomali canvas, tu sicuramente sì: non funzionano nello stesso modo?

P.S. ecco, lo hai già scritto sopra: "il comportamento normale è quello dei canvas"

[non si può ascoltare il TV e... :)]
 

Star-Dust

Expert
Licensed User
Longtime User
Probabilmente puoi accertartene usando GetAllViewsRecursive
Si è una buona idea. Domani lo verifico o se hai tempo fai una prova tu. :p
Io ho già spentp il pc :D
 

Star-Dust

Expert
Licensed User
Longtime User
Non c'è bisogno usare tanta roba. Ho messo in esemp4semplice sopra

B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private PanelMain As B4XView
    Dim xui As XUI 'ignore
End Sub

Private Sub Draw
    PanelMain.RemoveAllViews ' Senza questo il Canvas non disegna nulla, disegna solo la prima volta.
    Dim Can As B4XCanvas
    Can.Initialize(PanelMain)
    Can.DrawCircle(PanelMain.Width/2, PanelMain.Heght/2,rnd(50,200)*1dip,xui.Color_Red,True,1dip)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Ci sto trafficando (ancora senza tanta concentrazione).
Nell'inizializzazione di un oggetto B4XCanvas:

upload_2018-4-26_2-11-58.png


Quindi in B4J la cosa è un po' diversa, il canvas è una view vera e propria, sovrapposta alla view che gli passi.

[tra l'altro, stavo facendo le mie prove in b4a, dato che ho meno dimestichezza con b4j]
 

LucaMs

Expert
Licensed User
Longtime User
tra l'altro, stavo facendo le mie prove in b4a

[Nota che ho creato pnlBase2 - B4XView - da codice; era invece possibile creare un secondo panel normale tramite Designer, pnlBase2, e nel codice dichiarare un xpnlBase2 As B4XView ed impostare xpnlBase2 = pnlBase2, come nel secondo progetto allegato]
 

Attachments

  • Canvas prove.zip
    9.5 KB · Views: 250
  • Canvas prove 2.zip
    9.6 KB · Views: 241
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Sto guardando anche la view:
https://www.b4x.com/android/forum/threads/b4x-xui-custom-view-circularprogressbar.81604/

Anche in questa, per disegnare, usa un unico canvas, dichiarato a livello di modulo, e le varie:
TargetRect, ClearRect, ClipPath, RemoveClip



[... e con questo, almeno per il momento, mollo :)]



Ah, tanto perché non volevi metterti a studiare B4XView, come ti avevo consigliato...
hai creato uno "snippet" (si fa per dire, è un progetto) ottimo ed in tempi brevissimi
(quel Cube Spline)
Bravissimo!
 

Star-Dust

Expert
Licensed User
Longtime User
Come immaginavo aggiunge un pannello

Initialize (View As B4XView)
Initializes the canvas.
In B4A and B4i the canvas will draw on the passed view.
In B4J the canvas which is a view by itself is added to the passed pane as the first element
 

Sagenut

Expert
Licensed User
Longtime User
In questo momento i problemi li ho con il vecchio smartphone, non il huawei.
Premesso che per il vecchio non ho mai avuto un driver ideale, fino a prima che comprassi il huawei riuscivo a fare tutto con il vecchio, mentre adesso pare connettersi (si vede nella finestra del log) ma non riesce a fare uno screenshot.

Installerò un'app per farli oppure me la farò; per ora... lo fotografo :p:(

Buongiorno. Intendi fare uno screenshot del cellulare dal cellulare?
Prova a tenere premuto POWER+ VOLUME GIU' e dovrebbe fare lo screenshot.
Mi pare sia una funzione integrata del sistema android a prescindere dal costruttore.
 

Star-Dust

Expert
Licensed User
Longtime User
Io farei uno screenshot del tablet che inquadra il nuovo smartphone che ha la fotocamera aperta e puntata su vecchio smartphone :p
 

LucaMs

Expert
Licensed User
Longtime User
Buongiorno. Intendi fare uno screenshot del cellulare dal cellulare?
Prova a tenere premuto POWER+ VOLUME GIU' e dovrebbe fare lo screenshot.
Mi pare sia una funzione integrata del sistema android a prescindere dal costruttore.
Non credo (anche se proverò, per ora è spento) ma se fosse come dici, dovrebbe essere solo per gli smartphone (sul Huawei è così) perché sul mio tablet si deve tenere premuto uno dei tre tasti virtuali - quello per le appp recenti).
 

Sagenut

Expert
Licensed User
Longtime User
Ogni produttore poi aggiunge funzionalità tramite i propri software.
Il metodo che ti ho indicato io dovrebbe funzionare su tutti i dispositivi Android, in teoria, in quanto funzione del sistema.
 

LucaMs

Expert
Licensed User
Longtime User
Io farei uno screenshot del tablet che inquadra il nuovo smartphone che ha la fotocamera aperta e puntata su vecchio smartphone :p
Si ma sto pensando di riprendere il tutto con una vecchia cinepresa di mio padre, sviluppare la pellicola personalmente, tagliare un fotogramma, inviarne a me stesso una copia tramite fax e voilat, il gioco è fatto.
 
Top