четверг, 7 марта 2013 г.

Простое пианино для Android

Решил ещё немного попробовать себя в роли Android-разработчика.
Ссылка на apk-файл: https://github.com/kosc/droidino/raw/master/bin/Drodino.apk
Исходники на github: https://github.com/kosc/droidino
Идеи по улучшению приветствуются.

понедельник, 6 августа 2012 г.

Пишем простейший слайдер на jQuery

Начал изучение jQuery. Сделал простой слайдер. В планах - сделать генератор слайдеров с back-end'ом на Django. Вот исходники слайдера (можете считать, что лицензия GNU GPL :-) ):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Изучаем jQuery</title>
        <!-- подключаем JQuery -->
        <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
        <!-- jQuery Timers - плагин для таймеров -->
        <script type="text/javascript" src="js/jquery.timers.js"></script>
        <!-- Стиль лучше класть в отдельный файл, как и скрипт. Но здесь, для наглядности примера, я слил всё в один файл -->
        <style>
            .invisible{
                display: none;
            }
        </style>
        <script type="text/javascript">
            /* когда документ будет загружен, начнётся выполение анонимной функции */
            $(document).ready(function(){
                var active = 1; // индекс следующего отображаемого слайда
                $(document).everyTime(5000, function(){ /* каждые 5 секунд. Функция взята из плагина jQuery Timers */
                    $("#slider dt").each(function(i){ /* обходим все элементы немаркированного списка */
                        if (i != active) $(this).slideUp(); /* анимированно убрать слайд, если он не активный */
                        else $(this).slideDown(); /* иначе анимированно показать слайд */
                    });
                    /* вычисляем, какой слай будет следующий */
                    if (active != 2) active++;
                    else active = 0;
                });
            });
        </script>
    </head>
    <body>
        <p>
            Простейший слайдер на jQuery.
        </p>
        <div id="slider">
            <dl>
                <dt>
                    <img src="img/apple.jpg" />
                    <br />
                    <span>Apple Computers</span>
                </dt>
                <dt class="invisible">
                    <img src="img/google.jpg" />
                    <br />
                    <span>Google Incorporated</span>
                </dt>
                <dt class="invisible">
                    <img src="img/microsoft.jpg" />
                    <br />
                    <span>Microsoft Corporation</span>
                </dt>
            </dl>
        </div>
    </body>
</html>

Для того, что бы слайдер заработал, понадобиться скачать jQuery, плагин к нему jQuery Timers и фотки. У меня они размером 640x480. Искал через Google по названиям трёх гигантов IT-рынка.

вторник, 12 июня 2012 г.

Drowser - как написать простейший браузер для Android

В этой статье я расскажу, как написать простейший браузер для Android.
Тестировал на эмуляторе Android 2.2 и HTC Wildfire.
Надеюсь, что Eclipse к разработке под андроид вы уже настроили. Так что приступим.

Первым делом, надо попросить у устройства разрешение на доступ к интернету для вашего приложения. Это делается в файле AndroidManifest.xml . Нужно просто добавить слудующую строчку:
<uses-permission android:name="android.permission.INTERNET" />

Как дочерний элемент корня (тэг <manifest>) . Я добавил после строки про uses-sdk.
Далее идём в /res/layout/main.xml и заменяем имеющийся там код на следующий:
<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
fill_parent - это что бы браузер был на весь экран. Иное просто не имеет смысла. Теперь идём в /src/имя.вашего.пакета/ИмяАктивити.java У меня это /src/ru.tuluk.kosc.drowser . Добавляем во эту строчку:
import android.webkit.WebView;
В верхней части, рядом с аналогичными строками импорта. Эта строка нужна для импорта класса WebView, который как раз и представляет собой стандартный браузер Android. Теперь нам нужно создать экземпляр этого класса. Под строкой, начинающейся с public class, напишите: WebView mWebView; Теперь осталось направить пользователя на стартовую страницу. после строки setContentView(R.layout.main); напишите:
mWebView = (WebView) findViewById(R.id.webview); // связываем наш экземпляр класса с WebView на форме
mWebView.getSettings().setJavaScriptEnabled(true); // включаем JavaScript (можно этого и не делать, но тогда возможности будут не полными)
mWebView.loadUrl("http://polukoder.blogspot.com/"); // грузим стартовую страницу
Ну вот и всё, можно запускать. Честно говоря, для меня было большим сюрпризом, что WebView работает абсолютно так же, как и встроенный браузер - даже кнопка Menu вызывает такое же меню. В следующий раз надеюсь рассказать, как улучшить этот браузер, добавить своё меню и некоторые другие фишки.

вторник, 27 марта 2012 г.

Magic 8 ball для Android

Решил я тут опять потренироваться в разработке под Android - проверить, не всё ли уже забыл. Вспомнил, как мой товарищ Алексей, ещё живя в общежитии, написал Magic 8 ball из фильма "Траса 60". На C++, под консоль, но оно работало и даже отображало кириллицу. Решил написать нечто подобное для Android, код ниже.
package ru.qover.testing;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.util.Random;
import android.widget.TextView;

public class TestingActivity extends Activity {
    Random rand;
    Button btn;
    TextView text;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(getString);
        text = (TextView)findViewById(R.id.textView1);
        rand = new Random();
    }
    
    private OnClickListener getString = new OnClickListener()
    {
        public void onClick(View v)
        {
            Integer num = rand.nextInt(20) + 1;
            switch(num)
            {
            case 1:
                text.setText(R.string.s1);
                break;
            case 2:
                text.setText(R.string.s2);
                break;
            case 3:
                text.setText(R.string.s3);
                break;
            case 4:
                text.setText(R.string.s4);
                break;
            case 5:
                text.setText(R.string.s5);
                break;
            case 6:
                text.setText(R.string.s6);
                break;
            case 7:
                text.setText(R.string.s7);
                break;
            case 8:
                text.setText(R.string.s8);
                break;
            case 9:
                text.setText(R.string.s9);
                break;
            case 10:
                text.setText(R.string.s10);
                break;
            case 11:
                text.setText(R.string.s11);
                break;
            case 12:
                text.setText(R.string.s12);
                break;
            case 13:
                text.setText(R.string.s13);
                break;
            case 14:
                text.setText(R.string.s14);
                break;
            case 15:
                text.setText(R.string.s15);
                break;
            case 16:
                text.setText(R.string.s16);
                break;
            case 17:
                text.setText(R.string.s17);
                break;
            case 18:
                text.setText(R.string.s18);
                break;
            case 19:
                text.setText(R.string.s19);
                break;
            case 20:
                text.setText(R.string.s20);
                break;
            };
        }
    };
}
Строки засунуты в strings.xml, потому как это оптимальнее. Сами файлы strings.xml и раскладку (layout) main.xml выкладывать не стану, если кому сильно надо - пишите в личку, вышлю. Тем более, что каждый разработчик должен сам решать, как должны быть расположены компоненты интерфейса.

четверг, 15 марта 2012 г.

SharpDevelop

Сегодня я расскажу о такой замечательной вещи, как SharpDevelop. Это IDE с открытым исходным кодом. Написана она на .NET, и сама предпологает написание программ на этой платформе. Первое отличие от Visual Studio, которое бросилось мне в глаза - эта среда легче, быстрее, и генерирует более оптимальный и понятный код. Одно только название главной формы у Win32-приложения чего стоит ('Form1' у Visual Studio vs 'MainForm' у SharpDevelop). Так же заметил тесную интеграцию с svn. В студии эта интеграция тоже поддерживается, но её надо дополнительно настраивать, скачивая дополнительный плагин и долго с ним мучаясь. Помимо создания всех возможных видов приложений на VB .Net и C#, SharpDevelop умеет переводить эти языки друг на друга, а так же на Python и Ruby (этого я в VS тоже не встречал). Итак, если вы за open-source, если вы против пиратства и не работаете в компании, которая оплатит вам студию и заставит в ней кодить, если вы заинтересованны в создании проектов на среде .NET, то SharpDevelop - ваш выбор. Скачать это чудо программерской мысли и его исходники можно здесь. Сам пользуюсь 4.2.0 beta, и не заметил ещё ни одной причины, по которой она считаеться бетой.

пятница, 9 марта 2012 г.

Linux и Lenovo S10-3c

Давно известная проблема - на S10-3C ни в одном *nix из коробки не работает клавиатура. Сегодня покопался по форумам - проблема всего-то в устаревшей версии bios, перепрошился (причём перепрошиться можно только из-под Windows). Поставил Linux Mint. Работает и клавиатура, и даже wi-fi, но gnome 3 не для нетбуков. Да и в других DE виснет постоянно. Снёс. Решил вернуться к Ubuntu. Ах да, только сегодня узнал, что загрузочная флэшка должна быть отформатирована в FAT32, иначе загрузиться с неё не удастся. Это не блог про linux, но упоминать о нём я здесь буду. Скоро продолжу блогодвижок на Yii.

воскресенье, 8 января 2012 г.

Арканоид на flash: продолжение

Начал писать другой арканоид, с нуля, теперь весь код не во fla, а во внешних as-файлах. Теперь выкладываю только swf, ибо исходники стали сильно жирными. Ещё наконец-то разобрался с Box2D - я пытался использовать версию 2.1а (последнюю на момент написания), а она нестабильна. Взял версию 2.0.2 - всё отлично. Но с чужими движками мне рано ещё разбираться - надо сначала более-менее нормальный свой написать. Тогда и знаний ActionScript хватит на Box2D.

Ах да, я тут swf обещал: arcanoid.swf