Android Question Going nuts with view placement

microbox

Active Member
Licensed User
Longtime User
Hi everyone, Please help me out what I'm doing wrong. First code test I'm using is the following
I'm using Peter Simpson example code.
B4X:
Sub makeShuffle   
    CardArray = Array As String("W", "A", "R", "A","Y","T", "E", "K","I","N","N","O")
    ShuffleArray(CardArray)   
End Sub
When calling the above code works well as expected.
first.png
B4X:
Public Sub ShuffleArray(StringArray() As String)
    Dim width, offsetX, offsetY As Int
    width = 80dip
    Dim ArrayVal As String
    Dim Random As Int
    Label1.Text = ""
    For i = 0 To StringArray.Length - 1
        Random = Rnd(i, StringArray.Length)
        ArrayVal = StringArray(i)
        StringArray(i) = StringArray(Random)
        StringArray(Random) = ArrayVal
    Next
   
    For i = 0 To StringArray.Length - 1       
       
        Dim b As ImageView
        b.Initialize("img")
        Label1.Text = Label1.Text & StringArray(i)       
        If StringArray(i) = "A" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "A.png")
        else If StringArray(i) = "B" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "B.png")
        else If StringArray(i) = "C" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "C.png")
        else If StringArray(i) = "D" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "D.png")
        else If StringArray(i) = "E" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "E.png")
        else If StringArray(i) = "F" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "F.png")
        else If StringArray(i) = "G" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "G.png")
        Else If StringArray(i) = "H" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "H.png")
        Else If StringArray(i) = "I" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "I.png")
        Else If StringArray(i) = "J" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "J.png")
        Else If StringArray(i) = "K" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "K.png")
        Else If StringArray(i) = "L" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "L.png")
        Else If StringArray(i) = "M" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "M.png")
        Else If StringArray(i) = "N" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "N.png")
        Else If StringArray(i) = "O" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "O.png")
        Else If StringArray(i) = "P" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "P.png")
        Else If StringArray(i) = "Q" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "Q.png")
        Else If StringArray(i) = "R" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "R.png")
        Else If StringArray(i) = "S" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "S.png")
        Else If StringArray(i) = "T" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "T.png")
        Else If StringArray(i) = "U" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "U.png")
        Else If StringArray(i) = "V" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "V.png")
        Else If StringArray(i) = "W" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "W.png")
        Else If StringArray(i) = "X" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "X.png")
        Else If StringArray(i) = "Y" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "Y.png")       
        Else If StringArray(i) = "Z" Then
            b.Bitmap = LoadBitmap(File.DirAssets, "Z.png")           
        End If           
        Panel1.AddView(b,1dip + i * (width + 10dip),  (width + 10dip), width, width)
        Next
End Sub

But doing the below code shows differently
B4X:
Sub catTest
    wrdCat1(0)="Waraytekinno"     
  
    Dim StrTextArray(), StrText As String
    StrText = ""
    StrText = wrdCat1(0)
    StrTextArray = Regex.Split("", StrText)   
    For i = 1 To  wrdCat1(0).Length 
        CardArray(i) = StrTextArray(i).ToUpperCase.trim
    Next   
    ShuffleArray(CardArray)
End Sub
second.png

Thanks for your valuable time.
Joe
 

Jeffrey Cameron

Well-Known Member
Licensed User
Longtime User
Create a list of all of the "random" values you want in any order. Then, pick a random entry from 0-to-list-length, and remove that entry from your list when done with it. Rinse, and repeat.
 
Upvote 0

Jeffrey Cameron

Well-Known Member
Licensed User
Longtime User
but you can't simply remove an item from an ordinary List
Sure you can:
B4X:
Private Sub DumpList
    Dim poList As List
    Dim piEntry As Int
   
    poList.Initialize
    poList.AddAll(Array As String("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"))
   
    Do While poList.Size > 0
        piEntry = Rnd(0, poList.Size)
        Log("Entry: " & poList.Get(piEntry))
        poList.RemoveAt(piEntry)
    Loop
End Sub
Output:
B4X:
Logger connected to:  samsung SM-G900V
--------- beginning of main
--------- beginning of system
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
Entry: C
Entry: K
Entry: H
Entry: J
Entry: L
Entry: G
Entry: D
Entry: F
Entry: B
Entry: I
Entry: E
Entry: A
 
Upvote 0
Top