Android: рисунок на холсте и просмотре (без растрового карты)
-
25-10-2019 - |
Вопрос
Я создал ребенка 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. Почему?
PS, даже если я установите ширину и высоту статически, ничего не изменится. Если вы не возражаете, посмотрите на это применение: почему ничего не нарисовано?http://androidforums.com/attachment.php?attachmentId=21715&stc=1&d=1315232946
Решение 2
Я нашел нетривиальное решение. Я придал представление конструктором с 1 параметром. И затем я вставил пользовательский вид в макет и назвал Invalidate (), когда мне это было нужно.
Другие советы
Вы переписали 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 ...
}
}