Voglio pubblicare qui la mia domanda, perché so che se lo facessi nel forum "internazionale", mi risponderebbe solo Klaus e non voglio rompergli le scatole per l'ennerima volta (si può dire che lui sia uno specialista, in questo campo).
Donq (come direbbe Taranto a Totò)...
tramite una Seekbar, consento all'utente di variare le dimensioni di una ImageView.
La Seekbar ha valore 0-100; 50 corrisponde alle dimensioni originali dell'immagine, quindi aumentandone il valore, aumentano le dimensioni della ImageView e viceServa.
Dato che però l'utente può anche spostare la ImageView sullo schermo, durante lo "zoom" dovrei anche variare le proprietà Left e Top della stessa, affinché la parte centrale visibile... rimanga centrale.
Ad esempio, se la ImageView si trova in 0,0 (posizione iniziale) ma viene ingrandita usando la Seekbar, il centro dell'immagine "scorrerà" verso il basso a destra; io vorrei che rimanesse al centro, quindi Left e Top dovranno diminuire (in una qualche proporzione rispetto all'ingrandimento).
Non allego il "progetto" sviluppato finora in quanto contiene un'immagine pesante (bella scusa, eh ).
Questa però è la routine di "zoom", chiamata direttamente dall'evento ValueChanged della Seekbar (praticamente avrei potuto mettere il codice nell'evento stesso, ma cerco di essere pignolo e di lasciare separato il codice dalla GUI; in effetti, così facendo potrei anche chiamare la routine da codice, passandogli un Value a mio piacimento):
Uhm... mi sa che non bastano le informazioni che vi ho dato.
mSampleWidth e mSampleHeight diciamo che sono le dimensioni originali della ImageView (quelle iniziali, più che altro).
Da ricordare che la ImageView viene spostata dall'utente (col ditino).
Lo Zoom, così com'è, va solo da un -50% ad un +50%; non sarebbe male portarlo da -300% a +300%, cioè riducibile a un quarto e quadruplicabile.
[Se poi arriva Klaus e, malgrado il suo tedesco, vi batte sul tempo e mi da la risposta giusta... non so come fargli un monumento ]
Donq (come direbbe Taranto a Totò)...
tramite una Seekbar, consento all'utente di variare le dimensioni di una ImageView.
La Seekbar ha valore 0-100; 50 corrisponde alle dimensioni originali dell'immagine, quindi aumentandone il valore, aumentano le dimensioni della ImageView e viceServa.
Dato che però l'utente può anche spostare la ImageView sullo schermo, durante lo "zoom" dovrei anche variare le proprietà Left e Top della stessa, affinché la parte centrale visibile... rimanga centrale.
Ad esempio, se la ImageView si trova in 0,0 (posizione iniziale) ma viene ingrandita usando la Seekbar, il centro dell'immagine "scorrerà" verso il basso a destra; io vorrei che rimanesse al centro, quindi Left e Top dovranno diminuire (in una qualche proporzione rispetto all'ingrandimento).
Non allego il "progetto" sviluppato finora in quanto contiene un'immagine pesante (bella scusa, eh ).
Questa però è la routine di "zoom", chiamata direttamente dall'evento ValueChanged della Seekbar (praticamente avrei potuto mettere il codice nell'evento stesso, ma cerco di essere pignolo e di lasciare separato il codice dalla GUI; in effetti, così facendo potrei anche chiamare la routine da codice, passandogli un Value a mio piacimento):
B4X:
Sub ZoomImage(Value As Int)
Dim Incr As Float = (Value - 50) / 100
Dim IncrW As Int = mSampleWidth * Incr
Dim IncrH As Int = mSampleHeight * Incr
ivImage.Width = mSampleWidth + IncrW
ivImage.Height = mSampleHeight + IncrH
' ivImage.Left = ???
' ivImage.Top = ???
End Sub
Uhm... mi sa che non bastano le informazioni che vi ho dato.
mSampleWidth e mSampleHeight diciamo che sono le dimensioni originali della ImageView (quelle iniziali, più che altro).
Da ricordare che la ImageView viene spostata dall'utente (col ditino).
Lo Zoom, così com'è, va solo da un -50% ad un +50%; non sarebbe male portarlo da -300% a +300%, cioè riducibile a un quarto e quadruplicabile.
[Se poi arriva Klaus e, malgrado il suo tedesco, vi batte sul tempo e mi da la risposta giusta... non so come fargli un monumento ]
Last edited: