Рисуем фигуру?

Я долго без ответа пытался нарисовать фигуру. Я использовал 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);
    }
}

@CodingM Вы можете добавить холст в макет и переопределить onDraw() для его редактирования, таким образом вы просто показываете макет, а не холст.

user6233283 15.04.2018 00:51

@Jamie Corkhill Я использовал это в прошлом, и для меня это не сработало. Не могли бы вы показать мне пример?

CodingM 15.04.2018 00:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОК ... 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 респондентам. Кроме того, я не вижу голосов против вашего ответа.

Samuel Liew 15.04.2018 05:22

Другие вопросы по теме