Черно-белое изображение в Canvas

141
20 марта 2018, 01:02

Для отображения объектов на холсте использую следующий View:

public class CanvasView extends View {
private static final int letterWidth = 10;
private static final int margin = 10;
private static final int letterHeight = 10;
private static final int round = 5;
//цвета красные, но все отображается черным
private static final Paint paintBorders = new Paint(Color.RED); 
private static final Paint paintBitmap = new Paint(Color.BLUE);
private static final Paint paintText = new Paint(Color.WHITE);
private Path path = new Path();
private Bitmap bitmap;
private String text = null;
private Point textPos = new Point();
public CanvasView(Context context) {
    super(context);
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(bitmap, 0, 0, paintBitmap);
    canvas.drawPath(path, paintBorders);
    if(text != null)
    canvas.drawText(text, textPos.x, textPos.y, paintText);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
}
public void drawObject(GeometryObject object )
{

    Size size = compileSize(object);
    Point pos =  object.getPosition();
    int left = pos.x;
    int top = pos.y;
    int right = left + size.getWidth();
    int bottom = top + size.getHeight();
    Path.Direction direction = Path.Direction.CW;
    path.addRoundRect(left, top, right, bottom, round, round, direction);
    text = object.getName();
    textPos = new Point(left + margin, top + margin);
    invalidate();
}
//вычисление размеров прямоугольника
private static Size compileSize(GeometryObject object)
{
    int nameLength = object.getName().length();
    int dataLength = object.getData().length();
    int dataRowsNum = dataLength / nameLength + 1;

    int width = nameLength * letterWidth + 2 * margin;
    int height = 3 * margin + letterHeight + dataRowsNum * letterHeight;

    return new Size(width, height);
}

}

(объект GeometryObject содержит название объекта и данные объекта, все строковые типы. Так же содержит координаты для отображения)

При нажатии пользователем на кнопку в Activity открывается форма, в нее вводятся данные и создается GeometryObject. Далее при нажатии пользователем на экран в этот объект вносятся координаты точки, куда пользователь нажал и вызывается метод CanvasView.drawObject(). В итоге получается :

Фиолетовый цвет - это задний фон, а прямоугольник должен был получиться красного цвета. Итак, проблема заключается в том, что изображение получается черное, хотя я установил другие цвета. Как исправить это?

READ ALSO
Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибкуError:(34, 41) error: incompatible...

169
Как исключить из обфускации пакет

Как исключить из обфускации пакет

Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?

149
Деплой сервлета вручную на Tomcat: NotFound

Деплой сервлета вручную на Tomcat: NotFound

Создал простой сервлет:

156
OnTouchListener не работает в Service (на Xiaomi)

OnTouchListener не работает в Service (на Xiaomi)

Есть сервис, который имеет свойства ViewOnTouchListener Дальше при создании сервиса:

157