Можно ли добавить TextView
и ImageView
на холст?
TextView на холсте
Ответы (4)
Canvas не наследуется от ViewGroup, поэтому у него нет возможности добавлять к нему дочерние представления.
С Canvas вы используете методы drawBitmap и drawText для рисования изображений и текста вместо добавления дочерних элементов управления, таких как TextView и ImageView.
Это окольный путь, но этот урок добавляет текстовое представление к его холсту:
http://www.helloandroid.com/tutorials/how-draw-multiline-text-canvas-easyly
Если вам нужно свободно позиционировать ImageView и TextView, вы должны использовать RelativeLayout.
RelativeLayout имеет расширенные функции позиционирования и допускает перекрытие.
- поместите свой вид (который использует холст) внутри RelativeLayout,
public class YourComponent extends View{
@Override
protected void onDraw(Canvas canvas)
...
public void onDraw(){
....
....
ImageView yourImageView = .....
RelativeLayout.LayoutParams fParams = new RelativeLayout.LayoutParams(25,25);
fParams.leftMargin = 100; //x coordinate
fParams.topMargin = 25; /y coordinate
yourImageView.setLayoutParams(fParams);
((RelativeLayout) YourComponent.this.getParent()).addView(yourImageView);
}
}
выше код: я создал параметры макета, которые показывают размеры 25x25 для просмотра. и после этого я использовал поля, чтобы установить правильное положение в родительском макете. и установите для этого LayoutParams значение ImageView. и, наконец, я добавил этот imageView в родительский макет.
Но имейте в виду, что во время выполнения onDraw() вызов операции во внешнем представлении может остановить onDraw(). поэтому, если вы хотите использовать этот способ, убедитесь, что вы уже завершили все операции onDraw. Я не уверен, почему это происходит. Я пока не пробовал слишком много на нем наблюдать.