Страница 1 из 1

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

Добавлено: 14 июл 2014, 03:00
damager82
В этом уроке:
- рассматриваем PathEffect-объекты


Click here to read this article!

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

Добавлено: 28 авг 2015, 18:31
Juki
"Если вы этот отступ повесите в цикл, то линия оживет и поедет на месте." Как повесить отступ в цикл?

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

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

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

Добавлено: 28 авг 2015, 21:57
doter.ua
Juki писал(а):"Если вы этот отступ повесите в цикл, то линия оживет и поедет на месте." Как повесить отступ в цикл?
Как ты попал на 151й урок :D ?

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 29 авг 2015, 23:18
doter.ua
Juki писал(а):
doter.ua писал(а): Один из способов проанимировать: postDelayed + invalidate().
С циклами я еще в 6-м классе познакомилась!.
А сейчас в 7м классе :D ?

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

Добавлено: 31 авг 2015, 11:35
Juki
doter.ua писал(а): А сейчас в 7м классе :D ?
Ха-ха

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

Добавлено: 31 авг 2015, 21:07
Juki
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.