Урок 146. Рисование. Canvas-преобразования. Методы save и restore.

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

Урок 146. Рисование. Canvas-преобразования. Методы save и restore.

Сообщение damager82 » 10 мар 2014, 03:00

В этом уроке:
- используем матрицу канвы для преобразований


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

zm_sansan
Сообщения: 1
Зарегистрирован: 13 окт 2014, 22:28

Re: Урок 146. Рисование. Canvas-преобразования

Сообщение zm_sansan » 13 окт 2014, 22:30

Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: Урок 146. Рисование. Canvas-преобразования

Сообщение danek130995 » 23 ноя 2015, 14:45

zm_sansan писал(а):Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
zm_sansan, по идее должна, Вы же предварительно в основную матрицу(матрицу канвы) записываете преобразование перемещения, т.е. теперь все преобразования будут вестись относительно новой матрицы. По крайней мере в OpenGL так. Там в качестве "канвы" выступает мировая система координат(CW). А тут я не проверял.

Night_Scream
Сообщения: 54
Зарегистрирован: 23 сен 2013, 10:51

Re: Урок 146. Рисование. Canvas-преобразования

Сообщение Night_Scream » 24 ноя 2015, 07:59

danek130995 писал(а):
zm_sansan писал(а):Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
zm_sansan, по идее должна, Вы же предварительно в основную матрицу(матрицу канвы) записываете преобразование перемещения, т.е. теперь все преобразования будут вестись относительно новой матрицы. По крайней мере в OpenGL так. Там в качестве "канвы" выступает мировая система координат(CW). А тут я не проверял.
:D больше года прошло

Екатерина.
Сообщения: 1
Зарегистрирован: 14 июн 2018, 20:50

Re: Урок 146. Рисование. Canvas-преобразования. Методы save

Сообщение Екатерина. » 14 июн 2018, 20:56

Подскажите пжслт, как можно сделать, чтобы цвет менялся в анимации без движения. Например мне надо поменять цвет новогодних шаров. И я никак не могу сделать, чтобы цвет менялся. Привожу кусок елки с шарами.

Вот мой код:
package ru.startandroid.kusok_yelki;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

Paint p;
Paint p1;
Path path1;
Path path6;
Path path7;
int i=1;

public DrawView(Context context) {
super(context);
p = new Paint();
p.setStrokeWidth(10);
p.setStyle(Paint.Style.STROKE);

p1 = new Paint();

path1 = new Path();
path6 = new Path();
path7 = new Path();

}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);

// очистка path1
path1.reset();

// треугольник
path1.moveTo(160, 870);
path1.lineTo(360, 730);
path1.lineTo(560, 870);
path1.lineTo(160, 870);
path1.close();

// рисование path1
p.setColor(Color.GREEN);
p.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawPath(path1, p);

// очистка path6
path6.reset();

//рисование шаров красного цвета
path6.addCircle(230, 905, 35, Path.Direction.CW);
path6.addCircle(490, 905, 35, Path.Direction.CW);
path6.close();
for (int i = 1; i < 25; i++) {
p1.setColor(Color.RED);
p1.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawPath(path6, p1);
}

// очистка path6
path6.reset();

//рисование шаров синего цвета
path7.addCircle(230, 905, 35, Path.Direction.CW);
path7.addCircle(490, 905, 35, Path.Direction.CW);
path7.close();
for (int i = 1; i < 10; i++) {
p1.setColor(Color.BLUE);
p1.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawPath(path7, p1);
}

}
}

}

Ответить