Добавить вид на макет в определенном месте, используя Rect - PullRequest
0 голосов
/ 31 октября 2018

У меня есть пользовательский вид, и я хочу добавить этот вид в другое место экрана. Я создал метод, который может создать базу 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));
}

1 Ответ

0 голосов
/ 19 декабря 2018

После добавления View в рамке Layout используйте translationX и translationY , чтобы расположить его , так как новый добавленный вид добавляется к виду в (0,0) Предположим, вы хотите добавить представление в позиции 100 200 относительно структуры кадра, тогда ниже будет ваш код:

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);
}
...