Android - Как нарисовать письмо в определенной точке? - PullRequest
1 голос
/ 10 февраля 2011

Я хочу заполнить экран 100 различными буквами в случайных позициях.На iPhone я только что создал группу UILabels, установил их координаты x и y, а затем использовал анимацию для их перемещения.

На Android не похоже, что я могу добавить TextView к своему виду и указать егоX и Y. Есть ли способ сделать это?

    View gameView = findViewById(R.id.gameboard);
    tv = new TextView(gameView.getContext());
    tv.setText("A");
    tv.setWidth(w); tv.setHeight(h);
    // How to set the X and Y?

РЕДАКТИРОВАТЬ: решение было использовать AbsoluteLayout:

    AbsoluteLayout al = (AbsoluteLayout)findViewById(R.id.gb_layout);
    tv = new TextView(this);
    AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,10,10);        
    params.x = 50;
    params.y = 50;
    al.addView(tv, params);

и переместить его на основе MotionEvent me:

    AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams(
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,(int)me.getX(), (int)me.getY());
    mTV.setLayoutParams (p);

Ответы [ 4 ]

0 голосов
/ 26 апреля 2012

В android позиционирование дочерних представлений является обязанностью класса макета.

Вам необходимо создать custom.layout и переопределить метод onLayout. В этом методе вы можете перебирать все дочерние представления, вызывая View.layout (left, top, right, bottom) для каждого дочернего элемента.

я нашел этот пример кода, пока трал в сети: https://gist.github.com/882650

Вы также должны проверить view.setTranslationX (и Y), который может быть именно тем, что вам нужно

0 голосов
/ 10 февраля 2011

Я думаю, что вы создаете игру, и для этого вам следует взглянуть на SurfaceView здесь является хорошим примером, тогда

1 ... если вы посмотрите на код, есть метод onDraw, гдеВы получите ширину экрана и высоту

2 ... Теперь, взяв эту ширину и высоту в качестве начального числа для генератора случайных чисел, получите координаты x и y.

3 ... Итерируйте по точке 2100 раз, и вы получите желаемый результат

0 голосов
/ 10 февраля 2011

Вы можете использовать FrameLayout для этого.Установите прозрачность каждого фона TextView и добавьте его в FrameLayout.Сделайте каждый TextView и FrameLayout заполнить их родителя.FrameLayout размещает все свои дочерние представления в (0,0).Для перемещения букв просто измените верхний и левый отступы соответствующего TextView.

0 голосов
/ 10 февраля 2011

Я не совсем уверен, как бы вы поступили в коде, но вам нужно использовать абсолютный макет в качестве корневого элемента.(редактировать: не использовать абсолютный макет, так как было указано, что он устарел. Кажется, ближайшая альтернатива - RelativeLayout.)

Свойства в формате XML для абсолютных координат макета - layout_x и layout_y.

edit: небольшое исследование говорит о том, что вам нужно использовать setLayoutParams, но моя Eclipse IDE не работает должным образом, поэтому, к сожалению, я не могу протестировать именно то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...