/
Kulechek
/
Lab_8
Обзор
Документация
Войти
/
Kulechek
/
Lab_8
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/example/simplepaint/Draw2D.java
141 строка
5 KB
Temnikov Konstantin
.
25 апр 2025, 11:42
25 апр 2025, 11:42
1786822
Код
Авторство
О чём код?
package com.example.simplepaint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class Draw2D extends View { private Paint mPaint = new Paint(); private float birdOffset = 0; private boolean birdDirectionUp = true; public Draw2D(Context context) { super(context); setLayerType(LAYER_TYPE_SOFTWARE, null); // Для совместимости теней } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = canvas.getWidth(); int height = canvas.getHeight(); // Фон неба mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.parseColor("#87CEEB")); canvas.drawPaint(mPaint); // Солнце с тенью mPaint.setColor(Color.YELLOW); mPaint.setShadowLayer(15, 5, 5, Color.argb(150, 0, 0, 0)); // Тень canvas.drawCircle(width/2, height/2, 150, mPaint); // Центр экрана, радиус 150 mPaint.clearShadowLayer(); // Лужайка с тенью mPaint.setColor(Color.parseColor("#7CFC00")); mPaint.setShadowLayer(20, 0, 10, Color.BLACK); canvas.drawRect(0, height - 300, width, height, mPaint); // Высота 300px mPaint.clearShadowLayer(); // Текст "Лучик солнца" mPaint.setColor(Color.argb(200, 255, 165, 0)); // Оранжевый mPaint.setTextSize(45); mPaint.setTextSkewX(-0.3f); // Наклон текста // Облака mPaint.setColor(Color.WHITE); mPaint.setShadowLayer(10, 5, 5, Color.GRAY); drawCloud(canvas, 200, 150); // Левое облако drawCloud(canvas, width - 400, 80); // Правое облако // Дерево mPaint.clearShadowLayer(); mPaint.setColor(Color.rgb(139, 69, 19)); // Коричневый ствол canvas.drawRect(width - 200, height - 450, width - 160, height - 200, mPaint); mPaint.setColor(Color.GREEN); // Крона canvas.drawCircle(width - 180, height - 450, 80, mPaint); // Цветы на лужайке drawFlower(canvas, 300, height - 150); drawFlower(canvas, 500, height - 180); drawFlower(canvas, 700, height - 120); //Птички drawBird(canvas, 300, 400); drawBird(canvas, 350, 490); drawBird(canvas, 290, 550); // Анимация птички if (birdDirectionUp) { birdOffset -= 1; if (birdOffset < -10) birdDirectionUp = false; } else { birdOffset += 1; if (birdOffset > 10) birdDirectionUp = true; } invalidate(); // перерисовать bereza(canvas, 190, height-100, 3); } private void drawCloud(Canvas canvas, int x, int y) { canvas.drawCircle(x, y, 50, mPaint); canvas.drawCircle(x + 60, y - 20, 40, mPaint); canvas.drawCircle(x + 60, y + 30, 45, mPaint); canvas.drawCircle(x + 120, y, 50, mPaint); } private void drawFlower(Canvas canvas, int x, int y) { mPaint.setColor(Color.YELLOW); // Сердцевина canvas.drawCircle(x, y, 15, mPaint); mPaint.setColor(Color.RED); // Лепестки canvas.drawCircle(x - 25, y, 15, mPaint); canvas.drawCircle(x + 25, y, 15, mPaint); canvas.drawCircle(x, y - 25, 15, mPaint); canvas.drawCircle(x, y + 25, 15, mPaint); } private void drawBird(Canvas canvas, float x, float y) { mPaint.setColor(Color.BLACK); mPaint.setStrokeWidth(8); float offsetY = birdOffset; canvas.drawLine(x, y + offsetY, x + 25, y + 20 + offsetY, mPaint); // крыло вверх canvas.drawLine(x + 25, y + 20 + offsetY, x + 60, y + offsetY, mPaint); // крыло вниз } private void bereza(Canvas canvas, float x, float y, float size) { // Ствол — белый mPaint.setColor(Color.WHITE); canvas.drawRect( x - 10 * size, y - 150 * size, x + 10 * size, y, mPaint ); // Чёрные полоски mPaint.setColor(Color.BLACK); mPaint.setStrokeWidth(3 * size); canvas.drawLine(x - 8 * size, y - 40 * size, x + 8 * size, y - 40 * size, mPaint); canvas.drawLine(x - 8 * size, y - 80 * size, x + 8 * size, y - 80 * size, mPaint); canvas.drawLine(x - 8 * size, y - 20 * size, x + 8 * size, y - 20 * size, mPaint); canvas.drawLine(x - 8 * size, y - 60 * size, x + 8 * size, y - 60 * size, mPaint); // Крона mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.rgb(34, 139, 34)); canvas.drawCircle(x, y - 170 * size, 40 * size, mPaint); canvas.drawCircle(x - 25 * size, y - 140 * size, 35 * size, mPaint); canvas.drawCircle(x + 25 * size, y - 140 * size, 35 * size, mPaint); canvas.drawCircle(x, y - 130 * size, 30 * size, mPaint); } }