Добавить вид в макет в определенном месте с помощью rect

У меня есть настраиваемое представление, и я хочу добавить это представление в другом месте экрана. Я создал метод, который может создать базу Rect по некоторым входным параметрам, и я хочу показать этот объект на экране. Для этой цели я использовал FrameLayout и RelativeLayout, но FrameLayout поместил его в угол, а RelativeLayout его не показывает. Как я могу это исправить? Заранее спасибо.

Код Java:

RelativeLayout deviceContent = findViewById(R.id.deviceContent);

.
.
.
private void addView(){
    ViewDevice obj = new ViewDevice(this);
    int degrees = new Random().nextInt(360);
    final Rect rect = computeChildFrame(w/2, h/2, 50, degrees, (int) Utilities.dpToPx(48));
    obj.layout(rect.left, rect.top, rect.right, rect.bottom);
    deviceContent.addView(obj);
}

private static Rect computeChildFrame(final int centerX, final int centerY,
                                          final int radius, final float degrees, final int size) {

    final double childCenterX = centerX + radius
                * Math.cos(Math.toRadians(degrees));
    final double childCenterY = centerY + radius
                * Math.sin(Math.toRadians(degrees));

    return new Rect((int) (childCenterX - size / 2),
                (int) (childCenterY - size / 2),
                (int) (childCenterX + size / 2),
                (int) (childCenterY + size / 2));
}
0
0
223
1

Ответы 1

После добавления представления в макете кадра используйте переводX и переводY, чтобы расположить его, поскольку новое добавленное представление добавляется к представлению в точке (0,0), предположим, что вы хотите добавить представление в позиции 100,200 относительно макета кадра, тогда ниже будет код ur:

private void addView(){
    ViewDevice obj = new ViewDevice(this);
    int degrees = new Random().nextInt(360);
    final Rect rect = computeChildFrame(w/2, h/2, 50, degrees, (int) Utilities.dpToPx(48));
    obj.layout(rect.left, rect.top, rect.right, rect.bottom);
    obj.setTranslationX(100)
    obj.setTranslationY(200)
    deviceContent.addView(obj);
}

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