Yo lo hago de la siguiente Forma:
1º EN el designer pongo el ImageView le asigno la imagen que quiero que muestre y pongo un label con el texto que quiero que muestre
2º Coloco ImageView en la posición que quiero ya por código
' Boton Datos Concurso
bt1.RemoveView
MiPanel.AddView(bt1, (Pos1-bt1.Width)/2 , 90dip, bt1.width , bt1.Height)
' Boton Grupos Asignados
bt2.RemoveView
MiPanel.AddView(bt2, Pos1+(Pos1-bt2.Width)/2 , 90dip, bt2.width , bt2.Height)
' Boton Enjuiciamiento
bt3.RemoveView
MiPanel.AddView(bt3, (Pos1-bt3.Width)/2 ,bt1.Top+bt1.Height+25dip, bt3.width , bt3.Height)
' Boton Salir
bt4.RemoveView
MiPanel.AddView(bt4, Pos1+(Pos1-bt4.Width)/2 , bt3.Top , bt4.width , bt4.Height)
Cuando Hago el click en la imagen llamo a la rutina Pon_Boton para que haga la simulación que se ha pulsado
Sub Bt1_Click
Pon_Boton(bt1)
StartActivity("datosconcurso")
End Sub
Sub Pon_Boton(Panel As Panel)
' Con esto simulo que se ha pulsado el botón
Dim gd1 As GradientDrawable, col(2) As Int
col(0) = Colors.RGB(82,81,81)
col(1) = Colors.RGB(172,168,168)
gd1.Initialize("BOTTOM_TOP", col)
gd1.CornerRadius = 25dip
Panel.Background=gd1
' Pongo un tiempo para que se vea el botón pulsado
Dim Ti As Long
Ti = DateTime.Now + 100
Do While DateTime.Now < Ti
DoEvents
Loop
' Con esto dejo el botón en su estado normal
col(0) = Colors.RGB(172,168,168)
col(1) = Colors.RGB(82,81,81)
gd1.Initialize("BOTTOM_TOP", col)
gd1.CornerRadius = 25dip
Panel.Background=gd1
End Sub