Нарисуйте холст на макете, не скрывая элементы на интерфейсе - PullRequest
0 голосов
/ 28 ноября 2018

Я использую метод ниже, чтобы нарисовать что-то на макете, он отлично работает, прямоугольник появляется, но все остальное в пользовательском интерфейсе становится невидимым, даже если холст НЕ находится на элементе пользовательского интерфейса.

Я не смог найти подобную проблему с решением, поэтому я пришел спросить вас, ребята.

Я подозреваю, что это что-то с setContentView(myview), и это очень просто, но я застрял.

Вотмой код:

// MyView.java
public class MyView extends View {
Paint paint;
Path path;

public MyView(Context context) {
    super(context);
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint = new Paint();
    paint.setColor(Color.MAGENTA);
    paint.setStrokeWidth(10);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    canvas.drawRect(0, 0, 20, 20, paint);
}


// MainActivity: void onCreate()

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyView myview = new MyView(getBaseContext());
setContentView(myview);

1 Ответ

0 голосов
/ 28 ноября 2018

Да, конечно, это из-за setContentView(myview);.

Метод setContentView устанавливает пропущенное представление (или макет) в качестве видимого содержимого действия.

В вашемв случае, если новое настраиваемое представление заменяет ваш макет, который был завышен ранее.

Чтобы отобразить как элементы пользовательского интерфейса, так и настраиваемое представление, добавьте два других конструктора в свое настраиваемое представление и добавьте настраиваемое представление из XML, как вы бы добавилипростой TextView.

Конструкторы пользовательского представления должны быть определены, как показано ниже:

public MyView(Context context) {
    super(context);
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

Или вы можете взять ссылку на некоторый макет, такой как LinearLayout и т. д., и добавитьэкземпляр пользовательского представления с использованием layout.addView(myView);

...