Basic4Android. Пишем на бэйсике нативные приложения для Android

    Не знаю, почему про данный продукт инженерной мысли еще не рассказывали на Хабре. Может потому что писался в Израиле, а может, потому что сама мысль, что на Basic можно писать под Android – есть святотатство.
    В общем, факт остается фактом: писать на Basic под Android теперь можно и поможет вам в этом продукт под предсказуемым названием «Basic4Android».
    Кому интересно почитать про возможности продукта велком на официальный сайт. Я же предлагаю посмотреть на этого зверя в бою и разобрать небольшой пример, который покажет процесс разработки простенькой галереи.
    Первое что меня порадовало при знакомстве с b4a это то, что у него свой небольшой и шустрый редактор.



    Ничего сверхъестественного. Только самое привычное и необходимое: редактор кода и визуальный редактор форм.
    Чуть позже я обнаружил и по достоинству оценил возможность рисовать формы прямо внутри штатного эмулятора Android либо виртуальной машины.
    А теперь перейдём к примеру. Сделаем с помощью b4a простенький просмоторщик картинок, который ищет все картинки в папке «sdcard/Images» и выводит их в виде скролируемой галереи.
    Для этого в визуальном редакторе добавляем элемент «HorizontalScrollView».



    Выставляем ему такие начальные настройки:



    Затем, растянем этот элемент по ширине окошка. Для этого зайдем во вкладку «Designer scripts» и введем следующий код:

     HorizontalScrollView1.Width = 100%x
    


    После этого дизайнер можно закрыть. Перед закрытием вам предложат сохранить слой. Сохраняем:



    Затем переходим в редактор кода и в глобальных модулях определяем объекты к которым будем обращается:
    Sub Process_Globals
    	'These global variables will be declared once when the application starts.
    	'These variables can be accessed from all modules.
    Dim imagesFolder As String : imagesFolder = File.DirRootExternal & "/Images"
    Dim Bitmaps As List
    
    End Sub
    
    Sub Globals
    	'These global variables will be redeclared each time the activity is created.
    	'These variables can only be accessed from this module.
    Dim HorizontalScrollView1 As HorizontalScrollView
    
    End Sub
    

    А это листинг основной части программы с комментариями:
    Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then 'Если Activity загружается впервые то
    	ProgressDialogShow("Загрузка картинок") ' показываем прогресс-бар
    	Bitmaps.Initialize ' инициализируем массив в котором будут лежать картинки
    	Dim files As List ' инициализируем массив в котором будут лежать пути к файлам
    	
    	If File.Exists(imagesFolder, "") = False Then 'проверка наличия папки с картинками
    		ToastMessageShow("Такой папки нет: " & CRLF & imagesFolder, True)
    		Return ' Прости меня Хосспади
    	End If
    	files = File.ListFiles(imagesFolder) 'Вносим в массив все файлы в указанной папке
    	Dim f As String
    	For i = 0 To files.Size - 1
    		DoEvents 'Необходимо чтоб прогрессбар реагировал
    		'Берем i-тый файл. Если он кончается на .jpg то закидываем в список картинок 
    		f = files.Get(i)
    		If f.ToLowerCase.EndsWith(".jpg") Then
    			'объявляем переменную в которую поместим картинку
    			'загружаем в нее изображение и добавляем в массив картинок
    			'на всякий случай делаем ограничение в 50 картинок
    			Dim b As Bitmap 
    			b.InitializeSample(imagesFolder,f,350dip,350dip)
    			Bitmaps.Add(b)
    			If Bitmaps.Size > 50 Then Exit 
    		End If
    	Next
    	'Это сообщение которое появится по окончании загрузки
    	ToastMessageShow("Найдено " & Bitmaps.Size & " картинок", True)
    	ProgressDialogHide 'скрываем прогрессбар
    End If
    
    Activity.LoadLayout("main") 'Загружаем в текучую Activity наш слой
    'подгоняем ширину панелей внутри HorizontalScrollView1 под всю ленту картинок
    HorizontalScrollView1.Panel.Width = 350dip* files.Size
    
    'Добавляем ImageView для каждой картинки рядом с друг другом
    'саму картинку вставляем бэкграундом
    For i = 0 To Bitmaps.Size -1
    	Dim iv As ImageView : iv.Initialize("")
    	Dim bd As BitmapDrawable
    	bd.Initialize(Bitmaps.Get(i))
    	iv.Background = bd
    	HorizontalScrollView1.Panel.AddView(iv, 5dip + i * 350dip, 5dip, 340dip, 340dip)
    Next
    
    End Sub
    


    Запускаем Debug
    Отвечаем на запросы о названии пакета и названия программы:





    В результате получаем галерею с плавной прокруткой.



    Остается лишь добавить что продукт платный. На сегодняшний день стоимость подписки от 34$ до 299$. Лично я приобрел с двухгодовой подпиской, т.к. Продукт сейчас хорошо развивается и смысла брать с подпиской на 2 месяца — не вижу. Кстати если кому вдруг захочется приобрести — пишите в личку, у меня есть несколько купонов с 50% скидкой.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 20

      +3
      *картинка с буханкой-троллейбусом*
        +1
        Чем это лучше VB.NET + MonoDroid/MonoTouch?
          +2
          b4a на выходе генит java с некоторыми своими вставками.
            +5
            Пфффф. Очередной транслятор бейсика в другой язык? Это же убого.
              +4
              Все зависит от точки зрения. Если принципиально идти по пути тру-программера, и религиозные убеждения важнее чем скорый, пусть кое-какой но результат, то да убого.
              А если «лучше один раз вовремя чем 2 раза правильно» и за спиной приличный опыт работы с vb то почему бы и нет?
          +5
          я хочу это развидеть
            +2
            На здоровье
              0
              оно действительно действует.
              0
              хотел написать точно такой же комментарий, вы меня опередили
                +1
                не стоит жалеть, благодаря ему я не могу нажимать стрелочки и галочки
            • UFO just landed and posted this here
                +1
                Да. прикольная штукенция. Но честно говоря пока ее полезностью не проникся. Пока что этот мост использую чтоб подебажить приложение на устройстве а рисую в vbox-e
                • UFO just landed and posted this here
                +5
                А нельзя ли вас попросить набрать программу теста скорости «восемь ферзей» и поместить сюда результат? Это примерно оценит скорость системы на бейсике. На сайте дается огромная таблица производительности для калькуляторов и некоторых компьютеров.

                www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=700

                10 CLEAR:DEFINT A-Z (DEFINT used if possible)
                20 R=8 (R>=1)
                30 REM DIM A® (DIM used if necessary)
                40 IF X=R THEN 180 (140 for all solutions)
                50 X=X+1
                60 A(X)=R
                70 S=S+1
                80 Y=X
                90 Y=Y-1
                100 IF Y=0 THEN 40
                110 T=A(X)-A(Y)
                120 IF T=0 THEN 140
                130 IF X-YABS(T) THEN 90
                140 A(X)=A(X)-1
                150 IF A(X)0 THEN 70 (0 omitted if possible)
                160 X=X-1
                170 IF X0 THEN 140 (0 omitted if possible)
                180 PRINT S

                Правильный ответ: 876
                  +1
                  Упс, не в тот пост поместил коментарий. Просьба проигнорировать.
                    –4
                    И при этом вопрос плюсанули. )))
                  0
                  Конечно эклипсовский интерфейс для создания GUI меня не совсем устраивает, но чтоб писать на бэйсике — увольте.
                  Насколько читаемый код на выходе получается?
                    +2
                    Если это сделали, значит это кому-то все-таки нужно.
                    0
                    Не смотрел но не одобряю? :)
                      +3
                      Люди, что с вами?

                      Only users with full accounts can post comments. Log in, please.