Урок 151. Рисование. PathEffect

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 151. Рисование. PathEffect

Сообщение damager82 » 14 июл 2014, 03:00

В этом уроке:
- рассматриваем PathEffect-объекты


Click here to read this article!
Последний раз редактировалось damager82 31 май 2017, 17:27, всего редактировалось 3 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 28 авг 2015, 18:31

"Если вы этот отступ повесите в цикл, то линия оживет и поедет на месте." Как повесить отступ в цикл?

Аватара пользователя
An-droid
Сообщения: 51
Зарегистрирован: 25 авг 2015, 10:54

Re: Урок 151. Рисование. PathEffect

Сообщение An-droid » 28 авг 2015, 18:41

До этого урока я ещё не дошёл, пока что на 120.
Но циклы в Андроиде это циклы из Java/
Вот, например, лекция о них: http://kostin.ws/java/java-loops.html
Изображение

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 151. Рисование. PathEffect

Сообщение doter.ua » 28 авг 2015, 21:57

Juki писал(а):"Если вы этот отступ повесите в цикл, то линия оживет и поедет на месте." Как повесить отступ в цикл?
Как ты попал на 151й урок :D ?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 29 авг 2015, 10:10

doter.ua писал(а): Как ты попал на 151й урок :D ?
p3.setPathEffect(new DashPathEffect(new float[] { 50, 10, 5, 10 }, 25)); если эту строчку впихнуть даже в бесконечный цикл, то ничего не происходит. Хотя за отступ тут отвечает, только второй параметр, но как его повесить в цикл мне не совсем понятно. А это совершенно не означает, что я не умею с циклами работать

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 151. Рисование. PathEffect

Сообщение doter.ua » 29 авг 2015, 10:26

Juki писал(а):
doter.ua писал(а): Как ты попал на 151й урок :D ?
p3.setPathEffect(new DashPathEffect(new float[] { 50, 10, 5, 10 }, 25)); если эту строчку впихнуть даже в бесконечный цикл, то ничего не происходит. Хотя за отступ тут отвечает, только второй параметр, но как его повесить в цикл мне не совсем понятно. А это совершенно не означает, что я не умею с циклами работать
Создай переменную со значением 0 и цикл в котором будешь увеличивать её на 1 и выводить в лог. И проверку в конце если больше 100 - остановить цикл или сбросить переменную присвоив ей 0. Это не запустить полоску, но с циклами познакомишься.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 29 авг 2015, 11:49

doter.ua писал(а): Создай переменную со значением 0 и цикл в котором будешь увеличивать её на 1 и выводить в лог. И проверку в конце если больше 100 - остановить цикл или сбросить переменную присвоив ей 0. Это не запустить полоску, но с циклами познакомишься.
С циклами я еще в 6-м классе познакомилась! Ты анимацию по этому уроку сделал?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 151. Рисование. PathEffect

Сообщение doter.ua » 29 авг 2015, 14:00

Juki писал(а):
doter.ua писал(а): Создай переменную со значением 0 и цикл в котором будешь увеличивать её на 1 и выводить в лог. И проверку в конце если больше 100 - остановить цикл или сбросить переменную присвоив ей 0. Это не запустить полоску, но с циклами познакомишься.
С циклами я еще в 6-м классе познакомилась! Ты анимацию по этому уроку сделал?
Только читал. "Повесить в цикл" довольно абстрактный совет. Вызов OnDraw прорисует 1 frame. Что норм для статичной картинки, но не анимации. Циклы внутри онДроу юзлес т.к. отрисуется только последний вариант. Один из способов проанимировать: postDelayed + invalidate().
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 29 авг 2015, 15:42

doter.ua писал(а): Один из способов проанимировать: postDelayed + invalidate().
Спасибо, можно было сразу так ответить.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 151. Рисование. PathEffect

Сообщение doter.ua » 29 авг 2015, 23:18

Juki писал(а):
doter.ua писал(а): Один из способов проанимировать: postDelayed + invalidate().
С циклами я еще в 6-м классе познакомилась!.
А сейчас в 7м классе :D ?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 31 авг 2015, 11:35

doter.ua писал(а): А сейчас в 7м классе :D ?
Ха-ха

Juki
Сообщения: 7
Зарегистрирован: 13 авг 2015, 12:22
Откуда: Kharkiv

Re: Урок 151. Рисование. PathEffect

Сообщение Juki » 31 авг 2015, 21:07

doter.ua писал(а):Один из способов проанимировать: postDelayed + invalidate().

Код: Выделить всё

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new DrawView(this));
    }

    class DrawView extends SurfaceView implements SurfaceHolder.Callback {

        Path path;
        Paint p1;
        Paint p2;
        Paint p3;

        private DrawThread drawThread;

        public DrawView(Context context) {
            super(context);
            path = new Path();
            path.rLineTo(100, 300);
            path.rLineTo(100, -100);
            path.rLineTo(100, 300);

            p1 = new Paint(Paint.ANTI_ALIAS_FLAG);
            p1.setStyle(Paint.Style.STROKE);
            p1.setStrokeWidth(3);

            getHolder().addCallback(this);
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                                   int height) {

        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            drawThread = new DrawThread(getHolder());
            drawThread.setRunning(true);
            drawThread.start();
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            drawThread.setRunning(false);
            while (retry) {
                try {
                    drawThread.join();
                    retry = false;
                } catch (InterruptedException e) {
                }
            }
        }

        class DrawThread extends Thread {
            private long prevTime;

            private boolean running = false;
            private SurfaceHolder surfaceHolder;

            public DrawThread(SurfaceHolder surfaceHolder) {
                prevTime = System.currentTimeMillis();
                this.surfaceHolder = surfaceHolder;
            }

            public void setRunning(boolean running) {
                this.running = running;
            }

            @Override
            public void run() {
                Canvas canvas;

                p2 = new Paint(p1);
                p2.setColor(Color.GREEN);

                p3 = new Paint(p1);
                p3.setColor(Color.BLUE);

                int i=5;
                while (running) {
                    long now = System.currentTimeMillis();
                    long elapsedTime = now - prevTime;
                    if (elapsedTime > 30){
                        prevTime = now;
                        p2.setPathEffect(new DashPathEffect(new float[] { 30, 10}, i));
                        p3.setPathEffect(new DashPathEffect(new float[] { 50, 10, 5, 10 }, i+15));
                        i++;
                    }
                    canvas = null;
                    try {
                        canvas = surfaceHolder.lockCanvas(null);
                        if (canvas == null)
                            continue;
                        canvas.drawARGB(80, 102, 204, 255);

                        canvas.translate(20, 50);
                        canvas.drawPath(path, p2);

                        canvas.translate(150, 0);
                        canvas.drawPath(path, p3);
                    } finally {
                        if (canvas != null) {
                            surfaceHolder.unlockCanvasAndPost(canvas);
                        }
                    }
                }
            }
        }

    }

}
у меня получилось, но только используя SurfaceView.

Ответить