Italian Ridimensionare una Imageview creata da codice?

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Salve, ho un problemino.
Se carico una Imageview dal Designer, posso ingrandirla o ridimensionarla a secondo del dispositivo ma, se la creo da codice... come si fa?

Se in un ciclo metto:

B4X:
For i = 0 To 8
imgTP="L" & txtLTR(i) & ".png"
  Dim Up As ImageView
  Up.Initialize("Up")
  Up.Tag = i
  Up.Bitmap=LoadBitmap(File.DirAssets,imgTP)
  Activity.AddView(Up,5%x,5%y,5%x+(20%x*i),40%y)
 Next

... le immagini mi rimangono sempre della stessa dimensione di come le ho create :(
Come posso ingrandirle?
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie maxware, sembra funzionare.... anche se con le % è un po ostico regolarsi utilizzandola! :( Proverò con i dip oppure mi regolerò ;)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Scusa maxware, ma mi sbagliavo.:(
E' vero che la imageview si ingrandisce, ma non vedo il posizionamento delle altre 8! :(
Insomma, ne vedo solo una e non tutte e 9 allineate.
 

klaus

Expert
Licensed User
Longtime User
What exactly do you want to do ?
In your code Activity.AddView(Up, 5%x, 5%y, 5%x + (20%x * i), 40%y)
You set the top-left corner of all images on the same place ?
And then you set the Width proportional to the inncrement ?
This means the first ImageView has a width of 25%x
The secand width = 45%x
The third width = 65%x
and then 85%x, 105%x !!! etc
The width of the fifth ImagaView is bigger than the screen with !?
How do you want the ImageViews positioned on the screen ?
What is the width/heigth ratio of the images.
You must set the width and height of the ImageViews to the same ration, otherwise the images will be distorted !
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie ma già ieri lo avevo messo a posto ;)
Infatti, come dice klaus, mi ero accorto che aumentavo in maniera esponensiale. Pensavo al vecchio Line del basic dove, se non ricordo male, mettere le coordinate insiene alle grandezze - es box vuoto: Line(x+10,y+10)-(x+100,y+100), B :p
mentre, invece, il funzionamento esatto giusta sarebe questo:

B4X:
Activity.AddView(Up, x_pos, y_pos, x_width, y_height)

e questo il risultaro esatto

B4X:
 Activity.AddView(Up,5%x+(10%x*i),5%y,10%x,15%y)

______________________________________________________________
Thanks you Klaus, but yesterday I've solved ;)
I've confuse with the basic command Line where,if I remember correctly, the position and the size are together - es: Line(x+10,y+10)-(x+100,y+100), B :p
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Come fare per ricaricare l'immagine su imageview indicizzate? :confused:

Nel ciclo FOR iniziale, queste vengono messe in fila ma, se clicco sulla 4 e ottendo il suo TAG, come faccio a dire di eliminare quell'immagine?

Ho provato con

Sub Up_Click
Dim Indice As ImageView
Indice = Sender
Up.Tag=Indice.Tag
Up.Bitmap=LoadBitmap(File.DirAssets,"Vuoto.png")
End Sub

Seppur il Tag è quello giusto dell'immagine che si clicca, invece di essere "eliminata" l'immagine selezionata, mi scompare l'ultima dell'indice(in questo caso la 8). :confused:
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie Klaus...sono imbarazzato.
Ma se vorrei passare dall'Imageview1 indice 4 ad un'altro oggetto Imageview2 indice 2?
____________________________________________________________
Thank you Klaus... I've embarrassed :oops:
But if I want pass the imageview1 tag 4 on the other object imageview2 tag 2?:eek:
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Prego chiedo aiuto!!! :(

Questo è un esempio:

Array1+Image1
1 2 3 4 5 6 7 8


Array2+Image2
* * * * * * * *

Se seleziono il 2, dovrei avere:

Image1
1 * 3 4 5 6 7 8
Array1
1 * 3 4 5 6 7 8

Image2
2 * * * * * * *
Array2
2 * * * * * * *


...ed invece, graficamente ho questo:
Image1
1 * 3 4 5 6 7 8
Array1
1 * 3 4 5 6 7 8

Image2
1 2 3 4 5 6 7 2
Array2
2 * * * * * * *


All'interno degli array delle variabili ce li ho.... ma se debbo cambiare l'immagine2 non so come fare! :(

...non so se sono stato chiaro :rolleyes:
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Non ho capito molto, sono particolarmente confuso, in questo momento, e non ho ancora scaricato il tuo esempio, ma se vuoi eliminare oggetti, in generale, ti conviene metterli in una List (o meglio ancora in una Map).

Se poi spieghi bene lo scopo finale...!
 

LucaMs

Expert
Licensed User
Longtime User
Dimenticavo di ricordarti (!? :)) che le variabili oggetto si comportano diversamente dalle variabili "normali" (tipo Int e String).
Cioè, se hai una variabile di tipo ImageView (oppure una List o una Map che contiene alcune ImageView), se scrivi:

MyImageView1 = MyImageview2 è come se diventassero lo stesso oggetto, puntano alla stessa zona di memoria, per cui, da quel momento, se modifichi qualcosa in una delle due, cambia anche nell'altra.
 

LucaMs

Expert
Licensed User
Longtime User
Non mi è chiarissimo, ma mi sembra che tu voglio "mischiare" alcune immagini e fare una sorta di quiz.

Invece di usare stringhe, usa un array di Int come indice e mischia questo array. Poi, avendo memorizzato le ImageView (oppure delle BitMap) in una Map:

Private mapImages as Map
mapImages.Initialize
mapImages.Put(1, MyImage1)
mapImages.Put(2, MyImage2)
...

se hai chiamato Pointers (o Puntatori) l'array Int "mischiato":

mapImages.GetValueAt(Pointers(1)) e in base al valore contenuto in quel momento da Pointers(1) ottieni l'immagine che vuoi.
 

klaus

Expert
Licensed User
Longtime User
Sorry, but I don't really understand what exactly you want to do.
From what I have seen from your code I have two comments:
1) You dimed Dim Up, Dp As ImageView once in Globals, this will not work, you must dim them in the For / Next loop.
Or you can use arrays dimed once in Globals Dim Up(3),Dp(3) As ImageView
and in the For / Next loop
B4X:
For i = 0 To 2   
  tp = Number(i) & ".png"
  Up(i).Initialize("Up")
  Dp(i).Initialize("Dp")
Using arrays allows you to have access to all ImageViews everywhere.

2) You can use anchors in the Designer for the Panel, settingthe Horizontal and Vertical anchors to BOTH, so you don't need
Panel1.Height=100%y
Panel1.Width=100%x

at the beginning of Activity_Create.

3) Do you need Panel1 or couldn't the ImageViews be directly on the Activity ?

Attached a version with the modified suggested above.
 

Attachments

  • example1.zip
    65.4 KB · Views: 223

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Non mi è chiarissimo, ma mi sembra che tu voglio "mischiare" alcune immagini e fare una sorta di quiz.

Invece di usare stringhe, usa un array di Int come indice e mischia questo array. Poi, avendo memorizzato le ImageView (oppure delle BitMap) in una Map:

Private mapImages as Map
mapImages.Initialize
mapImages.Put(1, MyImage1)
mapImages.Put(2, MyImage2)
...

se hai chiamato Pointers (o Puntatori) l'array Int "mischiato":

mapImages.GetValueAt(Pointers(1)) e in base al valore contenuto in quel momento da Pointers(1) ottieni l'immagine che vuoi.
Non so come funzioni e dovrei provare.... ma il mio obbiettivo è quello di visualizzare l'oggetto grafico presente nella ImageView1 (secondo la selezione), nella prima immagine liber (Imageview2), e quindi con array valorizzato ad "X", della seconda colonna.
Per farci capire meglio è come se, in un solitario, dovessi muovere una carta dal mazzo e posizionarla su una riga senza carte o con la carta superiore ma...il tutto, però più semplicemente.... se nel secondo array non trovo "X" allora metti l'immagine nella stessa posizione del contatore.
Come hai visto dal codice di esempio postato, se clicchi suli numeri superiori, questi, rientrano nel giust posto all'interno dei due Array (spostando la "X" in quello superiore e il valore in quello inferiore.... ma, l'immagine, appare sempre all'ultima caricata.
E' vero che con la mossa di Klaus, l'immagine SUPERIORE, scompare.... ma quella inferiore?
Pensi che ciò che mi hai postato possa risolvere?
 
Top