Автор: admin

  • Прогноз погоды на C# Функция сплит и обработка XML

    public String get_code(String str)Про
    {
    String[] El = str.Split(new string[] { «<B>» }, StringSplitOptions.None);
    String[] E2 = El[1].Split(new string[] { «<» }, StringSplitOptions.None);
    String[] E3 = El[4].Split(new string[] { «<» }, StringSplitOptions.None);
    String[] E4 = El[5].Split(new string[] { «<» }, StringSplitOptions.None);
    E3[0] = (Math.Round((double.Parse(E3[0]) — 32) / 1.8)).ToString();
    E4[0] = (Math.Round((double.Parse(E4[0]) — 32) / 1.8)).ToString();
    return E2[0]+ «|» + E3[0]+»|»+E4[0];
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
    String S =webBrowser1.DocumentText;

    String [] El = S.Split(new string[] { «code» }, StringSplitOptions.None);
    String D1 = get_code(El[2]).ToString();
    String D2 = get_code(El[3]).ToString();
    String D3 = get_code(El[4]).ToString();
    String D4 = get_code(El[5]).ToString();
    String D5 = get_code(El[6]).ToString();
    String [] Today= D1.Split(new string[] { «|» }, StringSplitOptions.None);
    label7.Text = Today[1] + «°»;
    label9.Text = Today[2] + «°»;
    DateTime thisDate1 = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day);

    label6.Text = «Сегодня: » + thisDate1.ToString(«MMMM dd, yyyy»);

    listBox1.SelectedIndex = int.Parse(Today[0]);
    String[] X = listBox1.SelectedItem.ToString().Split(‘-‘);
    label8.Text = X[2];
    pictureBox2.BackgroundImage = imageList1.Images[int.Parse(X[3])];
    }
    }

    }

  • Асинхронная загрузка веб страницы в Android Studio

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            String response = "";
            for (String url : urls) {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();
    
                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(content));
                    String s = "";
                    while ((s = buffer.readLine()) != null) {
                        response += s;
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
    
        @Override
        protected void onPostExecute(String result) {
            textView.setText(Html.fromHtml(result));
        }
    }
    
    public void readWebpage(View view) {
        DownloadWebPageTask task = new DownloadWebPageTask();
        task.execute(new String[] { "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22karagandy%22)&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys" });
    
    }
  • Коды на прогноз погоды от Yahoo

    Прогноз погоды в XML JSON форматах

    https://developer.yahoo.com/weather/

    0-tornado-Торнадо-5
    1-tropical storm-Шторм-7
    2-hurricane-Ураган-5
    3-severe thunderstorms-Сильная гроза-7
    4-thunderstorms-Сильный шторм-7
    5-mixed rain and snow-Снег с дождем-5
    6-mixed rain and sleet-Дождь и мокрый снег-4
    7-mixed snow and sleet-Снег и мокрый снег-6
    8-freezing drizzle-Изморозь-6
    9-drizzle-Изморозь-6
    10-freezing rain-град-4
    11-showers-Ливень-4
    12-showers-Ливень-4
    13-snow flurries-Снег-6
    14-light snow showers-Снег-6
    15-blowing snow-Снег-6
    16-snow-Снег-6
    17-hail-Град-5
    18-sleet-Мокрый снег-6
    19-dust-Пыль-2
    20-foggy-Туман-2
    21-haze-Мгла-2
    22-smoky-Дымка-2
    23-blustery-Ветренно-2
    24-windy-Ветренно-2
    25-cold-Холодно-6
    26-cloudy-Облачно-1
    27-mostly cloudy (night)-Облачно-9
    28-mostly cloudy (day)-Облачно-1
    29-partly cloudy (night)-Частично облачно-9
    30-partly cloudy (day)-Частично облачно-3
    31-clear (night)-Чистое небо-8
    32-sunny-Солнечно-0
    33-fair (night)-Ясно-8
    34-fair (day)-Ясно-0
    35-mixed rain and hail-Дождь и град-5
    36-hot-Жарко-0
    37-isolated thunderstorms-Шторм-7
    38-scattered thunderstorms-Шторм-7
    39-scattered thunderstorms-Шторм-7
    40-scattered showers-Дождь-5
    41-heavy snow-Снег-6
    42-scattered snow showers-Снег-6
    43-heavy snow-Снег-6
    44-partly cloudy-Частично облачно-3
    45-thundershowers-Дождь-5
    46-snow showers-Дождь-5
    47-isolated thundershowers-Дождь-5
    3200-not available-Прогноз отсутствует-0

  • Меню XML для пятнашек

    <?xml version="1.0" encoding="utf-8"?>
    <menu
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
    
        tools:context=".MainActivity">
        <item android:id="@+id/action_menu"
    
            android:title="menu">
            <menu  >
                <item android:id="@+id/menu_item1"
                    android:title="Новая игра"></item>
                <item android:id="@+id/menu_item2"
                    android:title="Выход"></item>
            </menu>
    
        </item>
    
    </menu>
  • Пятнашки на Андроид последняя версия

    package sunshine.ikurs.kz.myapplication;
    
    import android.net.Uri;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.google.android.gms.appindexing.Action;
    import com.google.android.gms.appindexing.AppIndex;
    import com.google.android.gms.common.api.GoogleApiClient;
    
    import java.util.Random;
    
    
    public class MainActivity extends AppCompatActivity {
    
        //Объявляем массив кнопок
        Button[] B;
        /**
         * ATTENTION: This was auto-generated to implement the App Indexing API.
         * See https://g.co/AppIndexing/AndroidStudio for more information.
         */
        private GoogleApiClient client;
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu15, menu);
            return true;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //Создаем массив кнопок.
            B = new Button[16];
            //Записываем кнопки в массив.
            B[0] = (Button) findViewById(R.id.button1);
            B[1] = (Button) findViewById(R.id.button2);
            B[2] = (Button) findViewById(R.id.button3);
            B[3] = (Button) findViewById(R.id.button4);
            B[4] = (Button) findViewById(R.id.button5);
            B[5] = (Button) findViewById(R.id.button6);
            B[6] = (Button) findViewById(R.id.button7);
            B[7] = (Button) findViewById(R.id.button8);
            B[8] = (Button) findViewById(R.id.button9);
            B[9] = (Button) findViewById(R.id.button10);
            B[10] = (Button) findViewById(R.id.button11);
            B[11] = (Button) findViewById(R.id.button12);
            B[12] = (Button) findViewById(R.id.button13);
            B[13] = (Button) findViewById(R.id.button14);
            B[14] = (Button) findViewById(R.id.button15);
            B[15] = (Button) findViewById(R.id.button16);
    
            // ATTENTION: This was auto-generated to implement the App Indexing API.
            // See https://g.co/AppIndexing/AndroidStudio for more information.
            client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
        }
        private void showMsg(String msg) {
            Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG);
            toast.show();
        }
    
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getTitle().toString()) {
                case "Новая игра":
                    showMsg("Новая игра");
                    Random rand = new Random();
                    int n;
                    for (int i=0;i<500;i++) {
                        n = rand.nextInt(16);
                        buttonOnClick(B[n]);
                    }
                    break;
                case "Выход":
                    finish();
                    System.exit(0);
                    break;
            }
            return super.onOptionsItemSelected(item);
        }
    
        //Функция смены кнопок Swap(B[2],B[3]);
        public void Swap(Button B1, Button B2) {
            if (B2.getVisibility() == View.INVISIBLE) {
                B2.setVisibility(View.VISIBLE);
                B1.setVisibility(View.INVISIBLE);
                String Tmp = B1.getText().toString();
                B1.setText(B2.getText());
                B2.setText(Tmp);
            }
        }
    
        public void buttonOnClick(View V) {
            //Получаем текущую кнопку по которой кликнули
            Button current = (Button) V;
            //Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования
            String N = current.getTag().toString();
            //преобразуем тег из строки в целое число
            int n = Integer.parseInt(N) - 1;
            //рассчитываем номер строки путем целочисленного деления
            int y = n / 4;
            //вычисляем столбец
            int x = n;
            if (n >= 12) x = n - 12;
            else if (n >= 8) x = n - 8;
            else if (n >= 4) x = n - 4;
            //Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные
            //NT NL NR NB NC (Top Left Right Bottom Current)
            int nc = y * 4 + x;
            int nt = (y - 1) * 4 + x;
            int nb = (y + 1) * 4 + x;
            int nl = y * 4 + x - 1;
            int nr = y * 4 + x + 1;
            //Проверяем существование кнопки слева справа снизу сверху
            //Если существует то пытаемся поменять кнопки местами
            if (y - 1 >= 0)
                Swap(B[nc], B[nt]);
            if (y + 1 < 4)
                Swap(B[nc], B[nb]);
            if (x - 1 >= 0)
                Swap(B[nc], B[nl]);
            if (x + 1 < 4)
                Swap(B[nc], B[nr]);
    
            int cnt=0;
            for (int i=0;i<16;i++) {
    
                if (B[i].getText().equals(Integer.toString(i+1))) cnt++;
             }
            if (cnt == 16) showMsg("Вы выиграли");
    
        }
    
    
    }
  • Код XML для пятнашек на Андроид

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="sunshine.ikurs.kz.myapplication.MainActivity">
    
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true">
    
            <TableRow
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".25">
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="1"
                    android:tag="1"
                    android:id="@+id/button1"
                    android:layout_column="0"
                    android:layout_weight=".25"
                    android:onClick="buttonOnClick"
                    android:textSize="26sp" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="2"
                    android:tag="2"
                    android:id="@+id/button2"
                    android:layout_column="1"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="3"
                    android:tag="3"
                    android:id="@+id/button3"
                    android:layout_column="2"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="4"
                    android:tag="4"
                    android:id="@+id/button4"
                    android:layout_column="3"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
            </TableRow>
    
            <TableRow
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".25">
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="5"
                    android:tag="5"
                    android:id="@+id/button5"
                    android:layout_column="0"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="6"
                    android:tag="6"
                    android:id="@+id/button6"
                    android:layout_column="1"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="7"
                    android:tag="7"
                    android:id="@+id/button7"
                    android:layout_column="2"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="8"
                    android:tag="8"
                    android:id="@+id/button8"
                    android:layout_column="3"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
            </TableRow>
    
            <TableRow
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".25">
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="9"
                    android:tag="9"
                    android:id="@+id/button9"
                    android:layout_column="0"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="10"
                    android:tag="10"
                    android:id="@+id/button10"
                    android:layout_column="1"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="11"
                    android:tag="11"
                    android:id="@+id/button11"
                    android:layout_column="2"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="12"
                    android:tag="12"
                    android:id="@+id/button12"
                    android:layout_column="3"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
            </TableRow>
    
            <TableRow
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".25">
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="13"
                    android:tag="13"
                    android:id="@+id/button13"
                    android:layout_column="0"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="14"
                    android:tag="14"
                    android:id="@+id/button14"
                    android:layout_column="1"
                    android:layout_weight=".25"
                    android:textSize="26sp"
                    android:onClick="buttonOnClick" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="15"
                    android:tag="15"
                    android:id="@+id/button15"
                    android:layout_column="2"
                    android:layout_weight=".25"
                    android:onClick="buttonOnClick"
                    android:textSize="27sp" />
    
                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="16"
                    android:tag="16"
                    android:id="@+id/button16"
                    android:layout_column="3"
                    android:layout_weight=".25"
                    android:elegantTextHeight="false"
                    android:visibility="invisible"
                    android:onClick="buttonOnClick"
                    android:textSize="26sp" />
            </TableRow>
        </TableLayout>
    </RelativeLayout>
  • Код для пятнашек на Андроид

    package sunshine.ikurs.kz.myapplication;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    
    public class MainActivity extends AppCompatActivity {
    
        //Объявляем массив кнопок
        Button [] B;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //Создаем массив кнопок.
            B=new Button[16];
            //Записываем кнопки в массив.
            B[0]=(Button)findViewById(R.id.button1);
            B[1]=(Button)findViewById(R.id.button2);
            B[2]=(Button)findViewById(R.id.button3);
            B[3]=(Button)findViewById(R.id.button4);
            B[4]=(Button)findViewById(R.id.button5);
            B[5]=(Button)findViewById(R.id.button6);
            B[6]=(Button)findViewById(R.id.button7);
            B[7]=(Button)findViewById(R.id.button8);
            B[8]=(Button)findViewById(R.id.button9);
            B[9]=(Button)findViewById(R.id.button10);
            B[10]=(Button)findViewById(R.id.button11);
            B[11]=(Button)findViewById(R.id.button12);
            B[12]=(Button)findViewById(R.id.button13);
            B[13]=(Button)findViewById(R.id.button14);
            B[14]=(Button)findViewById(R.id.button15);
            B[15]=(Button)findViewById(R.id.button16);
    
        }
        //Функция смены кнопок Swap(B[2],B[3]);
        public void Swap(Button B1, Button B2)
        {
            if (B2.getVisibility() == View.INVISIBLE)
            {
                B2.setVisibility(View.VISIBLE);
                B1.setVisibility(View.INVISIBLE);
                String Tmp = B1.getText().toString();
                B1.setText(B2.getText());
                B2.setText(Tmp);
            }
        }
    
        public void buttonOnClick(View V) {
            //Получаем текущую кнопку по которой кликнули
            Button current = (Button)V;
            //Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования
            String N=current.getTag().toString();
            //преобразуем тег из строки в целое число
            int n = Integer.parseInt(N)-1;
            //рассчитываем номер строки путем целочисленного деления
            int y = n / 4;
            //вычисляем столбец
            int x = n;
            if (n >= 12) x = n - 12;
            else
            if (n >= 8) x = n - 8;
            else
            if (n >= 4) x = n - 4;
            //Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные
            //NT NL NR NB NC (Top Left Right Bottom Current)
            int nc = y * 4 + x;
            int nt = (y - 1) * 4 + x;
            int nb = (y + 1) * 4 + x;
            int nl= y * 4 + x-1;
            int nr = y * 4 + x + 1;
            //Проверяем существование кнопки слева справа снизу сверху
            //Если существует то пытаемся поменять кнопки местами
            if (y - 1 >= 0)
                Swap(B[nc], B[nt]);
            if (y + 1 < 4)
                Swap(B[nc], B[nb]);
            if (x - 1 >= 0)
                Swap(B[nc], B[nl]);
            if (x + 1 < 4)
                Swap(B[nc], B[nr]);
        }
    
    
    }
  • Создаем новое приложение в Android Studio

    Установим JAVA JDK пройдя по ссылке 

    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

    Установим Android studio с сайта

    http://developer.android.com/sdk/index.html

    ss+(2016-02-10+at+08.45.16)

    Создаем первое приложение SunShine — прогноз погоды для Android.

    Приложение sunshie
    Приложение sunshie

    Основными целями нашего курса являются:

    1. Получение базовых знаний по Android Studio.
    2. Изучение Android API
    3. Освоение основных концепций построения мобильных приложений и программирование приложений в условиях ограниченных вычислительных и энергоресурсов.
    4. Получение знаний по разработке графического интерфейса для устройств с различной плотностью пикселей и различным разрешением экрана.

     

    1. Запускаем Android Studio
    Запускаем Andriod Studio
    Запускаем Andriod Studio

    Выбираем в меню Start a new android studio project.

    2. Задаем имя приложения и домен.

    Наше первое приложение будет называться SunShine

    Создаем приложение в AndroidStudio
    Создаем приложение в AndroidStudio

    3. Выбираем SDK

    Давайте для начала разберемся что такое SDK?

    SDK (от англ. software development kit) — комплект средств разработки, который позволяет специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, игровых консолей, операционных систем

    Немножко о терминологии которую мы будем применять.

    Min SDK — Минимальная поддерживаемая версия SDK для нашего приложения.

    Target SDK — SDK платформы на которой мы тестируем наше приложение.

    Android не рекомендует использовать MinSDK ниже 2.3 так как большинство устройств поддерживающих более ранние версии уже не поддерживаются или были обновлены.

    3

    График показывающий количество устройств для каждой версии Android SDK.

    На сегодняшний день Android минимальная версия SDK поддерживаемая Google это Gingerbread.

    Выбирая ее в качестве Min SDK ваше приложение будет поддерживать 100% устройств.

    В начале каждой версии написана версия API

    API (Application Programming Interface) — это интерфейс программирования, интерфейс создания приложений. Если говорить более понятным языком, то API — это готовый код для упрощения жизни программисту.

    API 10 который поддерживает Android 2.3.3 (Gingerbrad) поддерживает большинство элементов UI и PlayMarket.

    Как выбрать Android SDK
    Как выбрать Android SDK

    Выбираем тип приложения по типу взаимодействия с пользователем (Activity type)

    Для первого приложения мы выберем Empty Activity

    Empty Activity
    Empty Activity

    Далее в окошке Customize activity мы ничего менять не будем для того чтобы все элементы проекта у всех были стандартными.

    Немножко подождем пока создается проект и скачаем необходимые файлы со спрайтами необходимыми для создания проекта.

     

    Справка. Что такое спрайты?

    Изначально под спрайтами понимали небольшие рисунки, которые выводились на экран с применением аппаратного ускорения. На некоторых машинах (MSX 1, NES) программная прорисовка приводила к определённым ограничениям, а аппаратные спрайты этого ограничения не имели. Впоследствии с увеличением мощности центрального процессора, от аппаратных спрайтов отказались, и понятие «спрайт» распространилось на всех двумерных персонажей. В частности, в видеоиграх Super Mario и Heroes of Might and Magic вся графика спрайтовая.

    К аппаратно ускоренным спрайтам вернулись в середине 1990-х годов — когда развитие мультимедиа и взрывное повышение разрешения и глубины цвета потребовало специализированный процессор в видеоплате. Именно тогда, как обёртка над аппаратным 2D-ускорителем, вышел DirectDraw. DirectX 8 ввёл общий API для двух- и трёхмерной графики, и в современных спрайтовых играх двухмерные спрайты выводятся точно так же, как и трёхмерные — как текстурированный прямоугольник.

    CSS-спрайты.
    Применяются в вебе. Несколько изображений располагаются в одном графическом файле. Для того, чтобы вырезать из файла нужный кусок, применяется CSS — отсюда название технологии.

    CSS-спрайты экономят трафик и ускоряют загрузку — браузеру потребуется запрашивать меньше файлов

    ic_launcher3 4 art_clear art_clouds art_fog art_light_clouds art_light_rain art_rain art_snow art_storm3 4 art_clear art_clouds art_fog art_light_clouds art_light_rain art_rain art_snow art_storm

    Теперь, когда проект загружен давайте загрузим иконку для нашего проекта.

    Для начала ознакомимся с представлениями файлов проекта.

    7

    В левом верхнем углу под основным меню из выпадающего списка мы можем выбирать различные виды представления файловой структуры проекта. Данная функция разработана для комфортного перехода разработчиков из различных сред программирования. Типовой структурой для большинства программистов Java является представление файлов по типу Project. Давайте выберем его. Так как в будущем вам будет проще осваивать различные среды программирования, такие как Visual Studio  Intell IJ IDEA и NetBeans.

    8

    Обратите внимание на нижнюю консоль. В ней отображается процессы выполняемые Gradle. Подождите окончания работы Gradle.

    В среде разработки приложений Android есть система которая называется Gradle

     

    Справка: Gradle

    Gradle — система автоматической сборки, построенная на принципах Apache Ant и Apache Maven. В Eclipse использовалась система Ant, но большинство разработчиков даже не замечало её работы. В основном возможности системы использовались в конторах для автоматизации различных задач. В Android Studio такой номер не пройдёт. Gradle сопровождает вас во время разработки постоянно. Поначалу, если вы перешли с Eclipse, Gradle сильно раздражает своими действиями. Но позже вы оцените её удобство и может даже полюбите её. Коротко говоря эта служба будет в фоновом режиме постоянно что то делать и вам будет нужно научиться работать с ней и понимать что если у вас выходят ошибки то скорее всего вам нужно дождаться окончания работы Gradle.

     

    Добавляем иконку для нашего Android приложения.

    10

    В Project View откройте вкладку app и найдите там src. Src — сокращение от sources, что означает источники.

    9

    Щелкните правой кнопкой по иконе SRC и в выпадающем меню выберите New->Image Asset

    11

    Давайте загрузим иконку sunshine для нашего приложения и загрузим ее в ресурсы нашего проекта.

    Ура наш проект создан!!!

    Установка нашего приложения для Android на телефон.

    Давайте установим наше приложение на наш телефон.

    Для этого нам потребуется установить USB драйвера через SDK manager.

    13

    Откроем SDK manager и установим usb драйвер.

    12

    Ну вот мы готовы к установке нашего приложения.

    Теперь нужно на телефоне включить режим разработчика и подключить его через USB.

    Для включения режима разработчика вам необходимо открыть настройки войти во вкладку об устройстве и проскролив в самый низ 8мь раз нажать на пункт списка  «номер сборки». После этого появится сообщение что вы активировали режим разработчика.

    Далее вернуться в настройки и открыть появившееся меню разработчика.  Разрешить отладку по USB. И теперь все готово к установке приложения на наш телефон. Подключите телефон и добавьте ваш компьютер в доверенные устройства по установки приложений.

    1

    После чего нажмите зеленую стрелку и у вас откроется окно  в котором вы увидите в списке устройств ваш телефон.

    Обратите внимание на то что Shift + F10 запускает ваше приложение.

    Попробуйте запустить приложение используя эту комбинацию клавиш.

    2

    Теперь ваш телефон должен появиться в списке подключенных устройств.

    Проверьте статус и совместимость версии SDK что версия вашего телефона выше чем MIN SDK.

    Нажмите Ок и готово. Приложение должно успешно установиться на ваш телефон.

     

    Эмулятор Android для Android studio.

    На практике гораздо удобнее использовать виртуальные устройства для тестирования программ.

    Homepage

    Одним из таких эмуляторов является genymotion. Скачайте его и запустите после установки.

    3

    После запуска вы увидите такой прекрасный телефон.

    4

    Давайте установим наше приложение на виртуальное устройство.

    Надеюсь у вас все получилось.

    Создаем список с элементами  в Android Studio для отображения прогноза погоды.

     

    Давайте рассмотрим три типа Layout — Расположения элементов в нашем приложении.

    ss+(2016-02-10+at+08.49.44)

    В зависимости от разрешения экрана нам необходимо будет использовать различные варианты размещения и масштабирования элементов.  Существуют три типовых схемы размещения элементов на экране.

    1. Frame Layout осуществляет размещение одного элемента на одном экране. Просмотр контента осуществляется фреймами.
    2. Linear layout. При таком размещении элементы размещаются друг за другом по горизонтали или по вертикали (horisontal/vertical).
    3. Relative Layout. Относительное размещение элементов позволяет размещать элементы относительно друг друга или относительно центра левого или правого края экрана с различными отступами.

    Для отображения элементов списка мы создадим новый xml layout.

    list_item_forecast.xml

    Для этого вам нужно в окне проекта открыть путь как указано на картинке и щелкнуть правой кнопкой по layout  и выбрать из появившегося меню первый пункт — create new layout. В появившемся диалоге задайте имя list_item_forecast.xml

    ss+(2016-02-15+at+04.09.02)

    После чего откройте это файл в графическом редакторе и добавьте LinearLayout и в него поместите textView

    Все шаги описаны на картинке.  Для textView задайте значения для свойства gravity по выравниванию как показано на картинке ниже. Дополнительно задайте размер шрифта 26sp.

    ss+(2016-02-15+at+04.17.52)

    Давайте немножко отвлечемся и разберемся как работает прокрутка в списках на Android.

    ss+(2016-02-15+at+04.30.34)

    В отличии от стандартного списка в приложениях Windows где мы не столь ограничены в ресурсах, в приложениях Android мы не можем загрузить все элементы сразу и прокручивать их. В Android мы будем повторно использовать элементы которые скрыты от нас. В итоге нам потребуется всего на дав элемента списка больше чем в видимой части для того чтобы прокручивать список. Как только верхний элемент становится полностью невидимым он тут же перескакивает в низ и в нем меняется текст на текст следующего элемента. И таким образом для реализации прокручивающегося списка требуется намного меньше памяти чем в приложениях Window.

    Более детально механизм повторного использования элементов списка показан на следующем слайде.

    ss+(2016-02-15+at+04.49.14)

    Создание списка элементов в Android Studio

    Ну теперь переходим к реализации списка. Давайте создадим новый layout который назовем fragment_main.xml

    В редакторе кода из списка элементов в Разделе контейнеры найдите listView и перетащите его на в визуальный редактор.

    Измените ID выбранного списка на listViewForecast.

    ss (2016-02-15 at 04.57.23)

    1. Щелкаем правой кнопкой по папке layout
    2. Создаем новый фрагмент.
    3. Находим ListView
    4. Перетаскиваем его в графический редактор.
    5. Выбираем его из списка.
    6. Задаем ему ID.

    Теперь давайте измени тип размещения на FragmentLayout в текстовом редакторе так как данное представление является фрагментом а не целым элементом приложения.

    ss (2016-02-15 at 05.14.04)

    Адаптеры и списки в Android Studio.

    ss (2016-02-15 at 05.36.47)

    Для того чтобы загружать элементы списка нам необходимо задать адаптер для списка и указать в каком массиве хранятся данные.

     

     

    
    
  • Школа Next в Караганде  3DSMAX 4 урок — делаем вилку

    Школа Next в Караганде 3DSMAX 4 урок — делаем вилку

    Сегодня мы продолжим изучение инструмента Loft, рассмотрим некоторые особенности применения этого инструмента, а также повторим и рассмотрим подробнее то, что было рассказано на прошлом уроке. Еще познакомимся с таким инструментами как Boolean и FDD 2x2x2. Ну и изучать все это будем на примере создания обычной столовой вилки.

    Для начала создадим основу вилки в виде вот такого сплайна (вид слева):

    image001

    Общая длина вилки должна быть около 20

    На прошлом уроке мы использовали для создания Loft-объекта одно сечение, но на этом уроке мы создадим объект, используя два сечения. Первое сечение для ручки вилки выглядит вот так (вид спереди):

    image002

    Еще раз напомню обязательно замыкайте сплайн. Размеры этого сечения примерно 0.3 по высоте и 1.1 по ширине. Обратите внимание что этот объект симметричен и можно создать сначала одну половинку, и отразив ее получить вторую половинку. Потом необходимо их «склеить» (все это было рассмотрено на прошлом уроке, на примере создания ручки).

    Сейчас надо создать второе сечение для зубьев вилки, для этого скопируйте первое сечение и устраните изгиб:

    image003

    Теперь необходимо выделить первый направляющий сплайн, и зайти во вкладку Create, выбирать Geometry, в выпадающем списке Compound Objects, нажимаем на кнопке Loft:

    image004

    Далее нажимаем на кнопке Get Shape:

    image005

    И кликните по первому сечению, в результате у меня получилось вот так:

    image006

    Получилось не совсем то что мы ожидали увидеть. Чтобы это исправить заходим во вкладку Modify, далее в подобъекты Loft-объекта и выбираем Shape:

    image007

    С помощью инструмента Select and Rotate выделите сечение (на предыдущем рисунке зеленого цвета) и поверните на 90 градусов, так чтобы объект стал похож на вилку:

    image008

    Теперь необходимо добавить второе сечение, для этого перейдите обратно в списке подобъектов на редактирование всего Loft-объекта:

    image009

    И раскройте свиток Path Parameters:

    image010

    Поставьте галочку рядом с «On» и плавно изменяя параметр Path, добейтесь того чтобы желтый крестик был примерно как на рисунке:

    image011

    После этого опять нажмите кнопку Get Shape и щелкните на первом сечении. Потом еще не много передвиньте желтый крестик:

    image012

    Нажмите Get Shape и щелкните на втором сечении, в результате должно получится вот так:

    image013

    Как видите получился объект с двумя сечениями с плавным переходом между ними. Если в результате добавления новых сечений у вас возникли трудности с неправильным их расположением, исправьте это путем редактирования подобъектов (так же как и с первым сечением)

     

    Теперь перейдите в свиток Deformations

    image014

    Здесь есть пять инструментов для деформации объектов методом лофтинга:

    Scale – масштаб, самый часто применимый инструмент. Позволяет масштабировать объект по различным осям в различных его частях.
    Twist – скрутка
    Teeter – качка
    Bevel – скос
    Fit – подгонка

    Мы использовать будем масштаб, нажмите кнопку Scale, появится вот такое окно:

    image015

    Здесь изображен график масштаба объекта по все его длине. По оси X изменяется месторасположение точки в процентах от 0 до 100. По оси Y откладывается масштаб конкретной точки на графике. По умолчанию масштаб каждой точки объекта 100% что соответствует прямой горизонтальной линии на уровне 100%. Так же на графике изображены вертикальные пунктирные лини они изображают месторасположение вершин направляющего сплайна.

     

    На верху расположено меню с помощью которого можно изменять график. Рассмотрим некоторые из его инструментов.

    Make Symmetrical – изменяет масштаб одновременно и по оси X и по оси Y

    image016

    Display X Axis – отображает график изменения масштаба по оси X

    image017

    Display Y Axis – отображает график изменения масштаба по оси Y

    image018

    Display XY Axis – отображает график изменения масштаба по обоим осям X и Y

    image019

    Move Control Point – двигает контрольные точки на графике

    image020

    Insert Corner Point – добавляет новую контрольную точку на график

    image021

     

    Delete Control Point – удаляет контрольную точку

    image022

    Внизу расположено меню, которое позволяет рассмотреть поближе какой-нибудь кусок графика. Рассматривать инструменты этого меню не будем, надеюсь они и так понятны.

     

    Перед тем как продолжить перейдите на уровень подобъектов и убедитесь, что направляющая Path находится строго по центру объекта, если это не так то, перейдите на уровень Shape и передвиньте все сечения так чтобы направляющая стала ровно по центру объекта. Иначе изменение масштаба объекта будет происходить не совсем корректно.

    Перед тем как что то изменять отключите симметричное изменение графиков по осям X и Y, нажав на кнопку Make Symmetrical. Теперь добавьте несколько вершин и измените график следующим образом:

    image023

    Во время создания точек изменяйте их тип так чтобы график плавно проходил через эти точки:

    image024

    В результате наш объект стал больше похож на вилку:

    image025

    Теперь осталось нарезать зубья вилки. Именно этим мы сейчас и займемся. Перейдите на вкладку Create далее Geometry в выпадающем списке Extended Primitives и выберите объект ChamferBox

    image026

    И создайте бокс там где должно быть пустое место:

    image027

    Потом скопируйте этот объект 2 раза, при копировании ставьте в появляющемся окне позицию Instance, это позволит изменяя исходный объект изменять аналогично и его копию:

    image029

    разместите полученные копии так чтобы получились одинаковые зубцы:

    Теперь выделите один из боксов и перейдите на вкладку Modify и в выпадающем списке Modifier List найдите модификатор FFD 2x2x2, он находится в разделе Object-Space Modifier. Этот модификатор добавляет вот такой бокс на объект с контрольными вершинами:

    image031

    В списке модификаторов рядом с FDD 2x2x2 находятся еще FDD 3x3x3 и FDD 4x4x4 по своему воздействию на объект они очень похожи и отличаются только количеством управляющих вершин, для наших же целей подойдет модификатор с самым малым количеством вершин, а именно FDD 2x2x2.

    image032

    Передвигая эти вершины можно соответствующе модифицировать объект. Теперь выделите 4 вершины на одной стороне бокса:

    image033

    Чтобы выделить эти вершины
    -Выбираем наш бокс(я выбрал первый созданный), выделились все остальные, т.к. они у нас взаимосвязаны.
    -Справа находим наше меню с подобъектами, там можно выбрать пункт Control Points и уже затем выделить вершины:

     

    И с помощью инструмента Select and Uniform Scale не много уменьшите этот конец бокса по оси X:

    Аналогично можно не много увеличить другой конец бокса

    Обратите внимание что копии бокса деформировались так же как и первоначальный бокс.

    image034

    Теперь еще раз проверьте одинаковые ли получаются зубцы, если надо подвиньте не много боксы. После этого выделите вилку и перейдите на вкладку Create подвкладку Geometry в выпадающем списке Compound Objects, нажимаем на кнопке Boolean:

    image035

    После этого нажмите кнопку Pick Operand B

    image036

    И щелкните на одном из боксов. В результате должен появиться вот такой зубец

    image037

    Повторите те же операции с другими боксами в результате у вилки появились зубцы:

    image038

    Как вы могли заметить инструмент Boolean позволяет делать булево вычитание одного объекта из другого, в результате как бы делать «дырки» в объекте.

    image039

    Ну вот наверное и все.

     

  • Курсы 3DMAX В Караганде. Loft — составные объекты.

    Курсы 3DMAX В Караганде. Loft — составные объекты.

    image054
    На этом уроке мы продолжим изучение сплайнов. Начнем знакомство с модификатором Loft. Далее освоим работу с двумя модификаторами Extrude и Bevel, они все не много похожи, но имеют некоторые различия, какие разберем в этом уроке. А рассматривать действие всех этих модификаторов мы будем на примере создания стула.
    Создайте новую сцену и начнем пожалуй с сиденья стула для этого перейдите во вкладку «Create», выберите объекты «Geometry», далее в выпадающем списке выберите «Extended Primitives» и нажав кнопку «ChamferBox»
    image002
    Создайте бокс с размерами как на рисунке:
    image003
    Мы создали бокс именно с закругленными ребрами, потому что в реальной жизни очень мало вещей имеют идеальные острые ребра.
    В результате получили переднею рейку сиденья:
    image004
    Теперь создайте такой же бокс с закругленными краями, но с параметрами:
    image005
    И пристройте его к первому боксу вот таким образом:
    image006
    Когда вы будите двигать какие либо объекты делайте это в видах сбоку или сверху но не в перспективе, так можно разместить объект с большей точностью. Так относительно наших реек на виде сверху они выглядят вот так:
    image007
    Как видите, они не много пересекаются.
    Теперь сопируйте боковую рейку и разместите ее аналогичного с другой стороны от передней рейки, а переднею рейку скопируйте на место задней рейки:
    image008
    Если вы забыли, как копировать объекты, то это делается зажиманием клавиши «Shift» на клавиатуре и передвижением копируемого объекта (подробно это разбиралось на уроке №2).
    Далее перейдем к созданию передних ножек стула. Для этого перейдите во вкладку «Create», выберите объекты «Shapes», нажмите кнопку «Line»
    image009
    и создайте сплайн, который показан на рисунках.
    Вид слева:
    image010
    Вид спереди:
    image011
    Общая высота ножки будет 58. Обратите внимание на верхнею часть ножки она немного изогнута одновременно вперед и наружу.
    Теперь создайте второй сплайн под названием «Circle» (Окружность) с радиусом 1.5, а количество сегментов 24:
    image012
    Теперь выделяем первый сплайн и идем во вкладку «Create» выбираем подкладку «Geometry» в выпадающем списке «Compound Objects», нажимаем кнопку «Loft»
    image013
    Инструмент «Loft» позволяет создавать объекты используя заданное сечение и указанное направление. Так в роли сечения у нас будет выступать второй сплайн – окружность, а в роли направления первый сплайн. Итак убедитесь что выделен первый сплайн, нажмите кнопку «Get Shape»
    image014
    И кликните на окружность. В результате получилась вот такая ножка:
    image015
    Так как созданные сплайны были вспомогательными теперь их можно скрыть чтобы не мешались но лучше их не удалять т.к потом может выяснится что результат получился не таким как ожидалась и редактируя исходные сплайны можно изменить результирующий объект.
    Скопируйте эту ножку и отразите ее по оси X с помощью инструмента «Mirror»:
    image016
    В результате получились 2 ножки стула:
    image017
    Теперь соберем все что у нас есть вместе, разместите рейки так чтобы изгиб ножек начинался сразу после них. При этом место стыка на виде сверху должно выглядеть так:
    image018
    В результате должно получится нечто такое:
    image019
    Теперь создадим таким же способом задние ножки стула, направляющие сплайны будут выглядеть примерно как на рисунках
    Вид слева:
    image020
    Вид спереди:
    image021
    Общая высота сплайна должна быть 74. Используя уже созданное сечение при помощи инструмента «Loft» получаем вот такую ножку:
    image022
    Аналогично копируем эту ножку, отражаем полученную копию и прикрепляем их к стулу:
    image023
    Далее создайте два цилиндра радиусом 0.9 и разместите их между передними и задними ножками стула:
    image024
    Теперь перейдем к созданию ручек стула, для этого перейдите на вид сверху и создайте сначала половину ручки:
    Вид сверху:
    image025
    Вид слева:
    image026
    Вид спереди:
    image027
    При этом наивысшая точка должна быть на высоте 85.
    Далее перейдем на редактирование подобъектов «Spline»:
    image028
    Выделите сплайн и создайте копию:
    image029
    Отразите полученную копию с помощью инструмента «Mirror»:
    image030
    Получится примерно так:
    image031
    Далее переместите полученную копию так чтобы 2 точки на месте стыка слились в одну, выделите эти две точки и соедините их нажав на кнопку «Weld»:
    image032
    Если две выделенные вершины находятся на расстоянии меньшем чем указано рядом с кнопкой «Weld», то эти вершины сливаются в одну. Этим способом можно склеить не только 2 вершины, а вообще любое количество вершин.
    Создайте сплайн сечения – окружность радиусом 1.8, и с помощью инструмента «Loft» завершите создание ручки:
    image033
    Теперь не много скруглим концы ручек, заодно не много уменьшив толщину ближе к концу. Для этого перейдем на вкладку «Modify» в раздел «Deformation» и нажмем на кнопку «Scale»:
    image034
    В появившемся окне показан график, изменяя который можно менять толщину объекта.Для начала поставим точку в середину графика с помощью инструмента «Insert Corner Point»:
    image035
    Вот так:
    image036
    Добавьте еще несколько точек и измените график как на рисунке:
    image037
    При этом высота верхних точек 120 нижних 95
    Увеличьте масштаб с помощью инструментов в нижней правой части окна и расставьте контрольные вершины так чтобы скруглить концы ручек:
    image038
    При этом чтобы добиться плавности графика меняйте тип вершин, так же как и у сплайна:
    image039
    В результате мы получили не много скругленную ручку:
    image040
    Измените аналогично другой конец графика, чтобы скруглить вторую ручку.
    Далее создадим сиденье стула, для этого создайте «ChamferBox» со следующими параметрами:
    image041
    Далее его следует не много сжать, для этого выделите этот бокс и кликнете правой кнопкой мыши по инструменту «Select and Uniform Scale» на главной панели инструментов:
    image042
    В появившемся окне укажите, что надо ужать объект по оси Z на 40%:
    image043
    Ну и разместите сиденье на свое место:
    image044
    Перейдем к созданию спинки. Создайте сплайн такой формы, чтобы полностью закрыть отверстие в спинке стула, при этом советую начать с одной половинки с последующим копированием и отражением, т.е. как мы создавали ручки стула. При создании обязательно замкните сплайн.
    Вид спереди:
    image045
    Вид слева:
    image046
    В списке модификаторов (Modifier List) найдите модификатор «Extrude» в разделе «Object-Space Modifiers».
    image047
    Этот модификатор не много напоминает действие инструмента «Loft», он тоже берет сечение и как бы «выдавливает» его, превращая плоский сплайн в объемный объект. Только в отличии от Loft этому модификатору не требуется направляющая, выдавливание всегда происходит по прямой. Чтобы понять как это работает это введите в поле «Amount» значение 1, все остальные поля оставьте так как они были по умолчанию:
    image048
    Как видите сплайн обрел объем:
    image049
    Обратите внимание на то, что окно с составляющими сплайна дополнилось модификатором «Extrude»:
    image050
    И выделяя различные строки в этом окне мы переходим на редактирование соответствующих частей. Таким образом, если после применения модификатора результат чем-то вам не понравился, то можно вернуться к редактированию вершин и изменить начальный сплайн. На последок расскажу про лампочку рядом с модификатором
    image051
    по умолчанию она горит (белого цвета) это означает, что модификатор активен и влияет на результирующий объект, если на нее нажать то она потухнет (станет серого цвета) и данный модификатор перестанет влиять на результат.
    Теперь скопируйте спинку, и удалите у копии модификатор «Extrude», для этого щелкните правой кнопкой мыши на модификатор и выберите Delete:
    image052
    И добавьте модификатор «Bevel». По своему действию он очень напоминает Extrude, но имеет очень важную особенность. Этот модификатор позволяет делать фаску на концах объекта, эта нам пригодится при изготовлении подушки для спинки стула. Настройте параметры модификатора как на рисунке:
    image048
    Не много расскажу про основные настройки этого модификатора. В секции «Surface» есть два значения «Linear Sides» и «Curved Sides». Если оставить выделенным первое то фаска будет с четко выраженными ребрами. Если оставить второе, то фаска будет более скругленной. «Segments» — чем больше это значение, тем больше секций между фасками и тем более плавной будут сами фаски. В свитке «Bevel Values» настройка самих фасок. Всего может быть 3 уровня фаски, чтобы добавить еще уровень надо поставить галку рядом с номер соответствующего уровня. У каждого уровня есть два параметра «Height» — отвечает за высоту выдавливания и «Outline» — чем больше это значение, тем больше угол фаски.
    Разместите созданную подушку на спинке стула:
    image054
    И на этом урок можно считать завершенным. На последок можно покрасить все части стула в соответствующие цвета, изменить отдельные части стула, если они кажутся не очень правильными. Иногда так бывает, что какие то мелкие ошибки замечаешь, когда объект уже собран.
    На этом уроке мы познакомились с действием инструмента «Loft». Именно познакомились, в следующих уроках я думаю, мы разберем его более детально. Ну и освоили модификаторы «Bevel» и «Extrude».