Android: рисование на Canvas и View (без растрового изображения)

1

Я создал ребенка RelativeLayout. В своем конструкторе я позвонил:

    public CanvasHolder(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.canvas_holder, this);    
        this.draw(new Canvas());
    }

И затем переопределите метод onDraw():

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        black.setARGB(255, 0, 0, 0);
        black.setAntiAlias(true);
        int halfWidth = this.getWidth() / 2;
        int height = this.getHeight();
        canvas.drawLine(0, 0, halfWidth, height, black);
    }

На экране нет линии. Кроме того, я пытался не называть "this.draw()", но ничего не произошло.

Я обнаружил, что halfWidth и height равно 0. Почему?

PS, даже если я установил ширину и высоту статически, ничего не изменится. Если вы не против, взгляните на это примерное приложение: почему ничего не нарисовано? http://androidforums.com/attachment.php?attachmentid=21715&stc=1&d=1315232946

  • 0
    Возможно, в вашем макете у вас есть высота и ширина, установленные для wrap_content? Попробуйте изменить его на fill_parent или что-то подобное.
  • 0
    Нет, я установил статические значения 160px и 220px.
Показать ещё 2 комментария
Теги:
drawing
android-canvas

2 ответа

0
Лучший ответ

Я нашел нетривиальное решение. Я включил представление конструктором с 1 параметром. И затем я вставил пользовательский вид в макет и вызвал invalidate(), когда мне это было нужно.

0

Вы перезаписали onMeasure? Здесь мое - вы можете обнаружить, что это называется несколько раз, пока изображение загружается, иногда с 0 значениями:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec);

    if (parentHeight > 0) {
        this.setMeasuredDimension(parentWidth, parentHeight);
        // ... other stuff ...
    }
}
  • 0
    Сожалею. Ничего не изменилось. Я попытался позвонить из действия canvasHolder.draw (new Canvas ()) через 10 секунд, но ничего не было нарисовано.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню