Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)
как исправить это , сделал все по инструкции
Timer1 - выдает ошибку. Использовал IdleTimer1, работает! unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 =...
в коде присутствуют ошибки! // Считываем координаты procedure TForm1.getCoords(Sender: TObject); var j1:longint; begin n:= StrToInt(Edit2.Text); //число точек s1:=Edit1.Text; s2:=''; i := 1; j:=1; k:=0...

Счетчики и рейтинг

Яндекс.Метрика Рейтинг@Mail.ru
Среда программирования: 
Android Studio

Для начала запустим Android Studio и создадим пустой проект.
launcher1
Задаем название приложения, пакет и путь, по которому будет лежать проект:
launcher2
Указываем минимальную версию Android, поддерживаемую нашим приложением. Google рекомендует использовать версию Android 4.0.3, но для наших целей подойдет и Android версии 2:
launcher3
Выбираем вкладку Add No Activity и нажимаем Finish:
launcher4

После создания нового проекта должно появиться следующее окно:
empty_project
Чтобы увидеть дерево текущего проекта (окно слева) нужно нажать на вкладку Project (слева) или Alt+1.

Создаем 2 класса: MyActivity и MyView. Чтобы добавить класс в наш проект нажимаем правой кнопкой мыши на папке app->java->me.graphica.canvasanimation и выбираем пункт меню New->Java Class.

MyView:

package me.graphica.canvasanimation;
 
import android.content.Context;
import android.view.View;
 
public class MyView extends View {
 
    public MyView(Context context) {
        super(context);
    }
 
}

MyActivity:

package me.graphica.canvasanimation;
 
import android.app.Activity;
import android.os.Bundle;
 
public class MyActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) { //вызывается каждый раз при загрузке приложения и повороте экрана
        super.onCreate(savedInstanceState);
 
        setContentView(new MyView(this)); //отображаем наш View на весь экран
    }
 
}

Осталось зарегистрировать MyActivity в манифесте приложения.
app->manifests->AndroidManifest.xml:

<manifest
    package="me.graphica.canvasanimation"
    xmlns:android="http://schemas.android.com/apk/res/android">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <!-- Регистрируем MyActivity -->
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
 
    </application>
 
</manifest>

Приложение готово. Чтобы проверить его на устройстве необходимо подключить смартфон через usb-кабель к компьютеру и нажать Shift+F10:
device_chooser
Приложение должно выглядеть следующим образом:
empty_app

Чтобы избавиться от верхней полоски, в файл app->res->values->styles.xml необходимо добавить следующий блок кода:

<style name="AppTheme.Fullscreen">
    <item name="android:windowFullscreen">true</item>
</style>

и сменить тему приложения в манифесте с
android:theme="@style/AppTheme"
на
android:theme="@style/AppTheme.Fullscreen"

Но смысла в таком пустом приложении немного. Поэтому наполним его графическими примитивами. Для этого достаточно привести класс MyView к следующему виду:

package me.graphica.canvasanimation;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;
 
public class MyView extends View {
 
    private Paint mPaint; //Paint говорит нам как именно рисовать графические примитивы
    private Paint mPaint2;
 
    private Path mPath; //Path представляет собой множество отрезков
 
    public MyView(Context context) {
        super(context);
 
        mPaint = new Paint();
        mPaint.setAntiAlias(true); //включить сглаживание
        mPaint.setColor(Color.BLACK); //цвет черный
        mPaint.setStrokeWidth(2f); //ширина контура 2 пикселя
        mPaint.setStyle(Paint.Style.FILL); //закрашивать примитивы черным цветом
        mPaint.setTextSize(50f); //размер шрифта для canvas.drawText()
 
        mPaint2 = new Paint(mPaint); //наследует все свойства mPaint
        mPaint2.setColor(Color.RED); //цвет - красный
        mPaint2.setStyle(Paint.Style.STROKE); //рисует контур примитивов красным цветом
 
        mPath = new Path(); //mPath можно было объявить и в onDraw(), но не рекомендуется
                            //так как создание объектов в onDraw() может тормозить прорисовку
    }
 
    @Override
    protected void onDraw(Canvas canvas) { //вызывается каждый раз, как нужно перерисовать view
        canvas.drawRect(100, 100, 350, 200, mPaint); //закрашенный прямоугольник
        canvas.drawCircle(120, 350, 40, mPaint);     //закрашенный круг
        canvas.drawText("Hello, world", 100, 450, mPaint); //черный текст
        canvas.drawLine(100, 580, 500, 520, mPaint);       //черный отрезок
 
        mPath.reset(); //очищаем наш путь (вместо mPath = new Path())
        mPath.moveTo(100, 700); //ставим первую вершину в точке (100, 700)
        mPath.lineTo(150, 900); //проводим прямую ко второй вершине
        mPath.lineTo(200, 600); //к третьей
        mPath.lineTo(100, 700); //замыкаем, получая треугольник
        canvas.drawPath(mPath, mPaint); //рисуем закрашенный треугольник
 
        mPath.reset();
        mPath.moveTo(100 + 200, 700);
        mPath.lineTo(150 + 200, 900);
        mPath.lineTo(200 + 200, 600);
        mPath.lineTo(100 + 200, 700);
        canvas.drawPath(mPath, mPaint2); //рисуем треугольник с красным контуром
 
        canvas.translate(300, 1000); //все дальнейшие примитивы будут смещены на 300px вправо и 1000 вниз
        canvas.rotate(30); //и повернуты на 30 градусов
        canvas.drawText("Hello, world!", 10, 10, mPaint2); //рисует повернутый текст в точке (310, 1010)
    }
 
}

Теперь наше приложение выглядит так:
app_complete