В этом уроке:
- используем матрицу канвы для преобразований
Click here to read this article!
Урок 146. Рисование. Canvas-преобразования. Методы save и restore.
Урок 146. Рисование. Canvas-преобразования. Методы save и restore.
Последний раз редактировалось damager82 29 май 2017, 23:22, всего редактировалось 5 раз.
Re: Урок 146. Рисование. Canvas-преобразования
Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
-
- Сообщения: 42
- Зарегистрирован: 25 янв 2015, 18:57
Re: Урок 146. Рисование. Canvas-преобразования
zm_sansan, по идее должна, Вы же предварительно в основную матрицу(матрицу канвы) записываете преобразование перемещения, т.е. теперь все преобразования будут вестись относительно новой матрицы. По крайней мере в OpenGL так. Там в качестве "канвы" выступает мировая система координат(CW). А тут я не проверял.zm_sansan писал(а):Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
-
- Сообщения: 54
- Зарегистрирован: 23 сен 2013, 10:51
Re: Урок 146. Рисование. Canvas-преобразования
больше года прошлоdanek130995 писал(а):zm_sansan, по идее должна, Вы же предварительно в основную матрицу(матрицу канвы) записываете преобразование перемещения, т.е. теперь все преобразования будут вестись относительно новой матрицы. По крайней мере в OpenGL так. Там в качестве "канвы" выступает мировая система координат(CW). А тут я не проверял.zm_sansan писал(а):Если указать точку опоры масштабирования в scale, то относительно неё происходит масштабирование.
А что если предварительно холст переместить, т.е. выполнить функцию translate с некими параметрами, то вместе с этим переместиться ли точка опоры масштабирования или же нет?
-
- Сообщения: 1
- Зарегистрирован: 14 июн 2018, 20:50
Re: Урок 146. Рисование. Canvas-преобразования. Методы save
Подскажите пжслт, как можно сделать, чтобы цвет менялся в анимации без движения. Например мне надо поменять цвет новогодних шаров. И я никак не могу сделать, чтобы цвет менялся. Привожу кусок елки с шарами.
Вот мой код:
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);
}
}
}
}
Вот мой код:
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);
}
}
}
}
Re: Урок 146. Рисование. Canvas-преобразования. Методы save и restore.
getMatrix() deprecated в API 16 (2012г).