Я долго без ответа пытался нарисовать фигуру. Я использовал setContentView (view) для этого представления. Однако у меня есть еще один setContentView:
setContentView(R.layout.activity_main);//Buttons, Views from XML...
setContentView( mCustomDrawableView);//Custom Shape
Проблема в том, что он показывает только вид ОДИН, форму. Buttons, определенный на XML, больше не существует. В основном, тот setContentView(view), который вызывается последним, является единственным View, который вытягивается. Я также пробовал многие другими способами нарисовать фигуру без ответа, что работает.
Я видел, что несколько setContentView действительно перекрывают друг друга, но это единственный способ, которым работает частично. Есть ли способ отобразить оба представления или же, другой способ рисовать фигуру и мой XML Views?
Обновлено:
Моя фигура сделана на java, а не на XML
Обновлено еще раз:
Вот мой класс customShape:
public class CustomDrawableView extends View {
private ShapeDrawable mDrawable;
public CustomDrawableView(Context context) {
super(context);
int x = 10;
int y = 10;
mDrawable = new ShapeDrawable(new RectShape());
// If the color isn't set, the shape uses black as the default.
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x,y,x+10,y+10);
}
protected void onDraw(Canvas canvas) {
mDrawable.draw(canvas);
}
}
@Jamie Corkhill Я использовал это в прошлом, и для меня это не сработало. Не могли бы вы показать мне пример?




ОК ... setContentView - это что-то, что принимает макет / вид / что угодно, и ввод определяет содержимое активности / фрагмента, на которое вы его устанавливаете.
Поэтому, конечно, ваш первый вызов выполняет весь макет, а второй стирает его и устанавливает контент в соответствии с тем, что вы ему отправляете.
Дело в том, чтобы получить ваше представление, а затем добавить его в макет. Если у вас есть какое-либо представление в исходном файле setContentView xml с именем (+ id) и определенным (Layout x = getfromid (r.id.x), вы можете добавить свое представление в этот макет с помощью x.addview (myview) или x.addview ( CustomDrawableView (контекст)).
-редактировать для уточнения-
У Activity / Fragment есть макет, который вы устанавливаете с помощью setContentView. Обычно вы делаете это один раз. Макет определяет, где размещаются виды.
Итак, вы устанавливаетеContentView (your.xml) в onCreate. Если у вас есть программный класс View, вы можете сделать две вещи: добавить новый YourView в именованный и указанный макет в вашем act / frag (используя любой макет, определенный в xml, переданный вашему фрагменту / act в xml, переданном в setContentView, и затем определяется Layout x = findViewById (R.id.idoflayoutinxmlinfield 'android: id = "@ + id / x") в коде.
Затем вы можете x.addview (новый MyView (контекст)) или Myview z = новый MyView (контекст) и x.addView (z);
-edit2-
Когда вам станет лучше, вы также можете просто добавить свой собственный View к исходному макету, добавив его к исходному определению xml.
-edit3-
Вздох. ОК. Вот:
В вашем java-файле деятельности:
RelativeLayout myRellayout;
@Override
public void onCreate(){
setContenView(your.xml)
myRelLayout = findViewByID(R.id.myrellayout);
myRelLayout.addView(new MyCustomView(this));
//or define your custom view and the add it by:
//MyCustomView mcv = new MyCustomView(this);
//myRelLayout.addView(mcv);
}
И ваш xml должен содержать любой макет, подобный этому:
<RelativeLayout
android:id = "@+id/myrellayout"
android:width = "whatever"
android:height = "whatever"
/>
@MacD Не обвиняйте Джейми в том, что он голосовал против вас. Право отрицательного голоса предоставляется 125 респондентам. Кроме того, я не вижу голосов против вашего ответа.
@CodingM Вы можете добавить холст в макет и переопределить
onDraw()для его редактирования, таким образом вы просто показываете макет, а не холст.