Android: рисование на Canvas и View (без растрового изображения) - PullRequest
1 голос
/ 05 сентября 2011

Я создал дочерний элемент 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 (), но ничего не произошло.

Я обнаружил, что половина ширины и высоты равна 0. Почему?

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

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

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

0 голосов
/ 05 сентября 2011

Вы перезаписали 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 ...
    }
}
...