Добавление представления в ViewGroup

Я пытаюсь добавить View в ViewGroup на ViewGroup onTouchEvent, следующий код:

        ViewGroup mDrawingCanvas = new ViewGroup(mContext) 
        {
            @Override
            public boolean isFocused() {
                // TODO Auto-generated method stub
                Log.d(TAG, "View's On focused is called !");
                return super.isFocused();
            }

            @Override
            public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:

                    View vv = new View(mContext);
                    vv.setBackgroundColor(Color.GREEN);
                    vv.setLayoutParams(new LayoutParams(200, 200));
                    this.addView(vv);

                    Toast.makeText(mContext, "Views child count = "+this.getChildCount(), Toast.LENGTH_SHORT).show();;

                    break;

                return true;
            }

            @Override
            protected void onLayout(boolean changed, int l, int t, int r,
                    int b) {
                // TODO Auto-generated method stub

            }
        };

Представление добавляется в группу просмотра, Toast отображает большее количество просмотров при каждом событии Touch Down, но представление не отображается на экране в группе просмотра.
Я видел связанный вопрос в StackOverflow, но мой вопрос уникален. и разные.
Пожалуйста, подскажите, как решить эту проблему, любая помощь очень ценится.

P.S. Я также пытался установить параметры макета представления, прежде чем добавлять его в группу просмотра, но получаю те же результаты. Я также напечатал ширину и высоту представления в LogCat после добавления его в ViewGroup, и он всегда отображает 0. Я думаю, что проблема где-то с настройками ширины и высоты представления.


person Salman Khakwani    schedule 14.10.2013    source источник
comment
реализовать метод onLayout   -  person pskink    schedule 14.10.2013
comment
Пожалуйста, уточните, какую реализацию я должен сделать в методе onLayout(...)?   -  person Salman Khakwani    schedule 14.10.2013
comment
просто посмотрите существующий ViewGroup.onLayout. реализации   -  person pskink    schedule 14.10.2013
comment
здесь у вас есть FrameLayout grepcode.com/file/repository.grepcode.com/java/ext/   -  person pskink    schedule 14.10.2013


Ответы (2)


Если вы используете пользовательский ViewGroup, вы должны реализовать метод onLayout для отображения чего-либо.

ViewGroup — это просто базовый класс для других макетов, сам по себе он ничего не делает. Я бы посоветовал использовать одного из его потомков, например FrameLayout или LinearLayout.


Если вы создаете приложение для рисования, вам может быть лучше использовать Canvas вместо пользовательского макета. Canvas уже предоставляет несколько методов для рисования линий, кругов, прямоугольников и т. д. Однако вам придется немного поработать, если вы захотите потом переместить один элемент.

Рисование на холсте

person nicopico    schedule 14.10.2013
comment
Спасибо за быстрый ответ! Пожалуйста, поделитесь примером кода onLayout(..), чтобы я мог его настроить :) - person Salman Khakwani; 14.10.2013
comment
Я пробовал рисовать фигуры и другие вещи на рисовании. Но я не могу выбрать или переместить рисунки. Поэтому я перешел к этому подходу. Взгляните на этот вопрос stackoverflow.com/questions/19354776/ - person Salman Khakwani; 14.10.2013

Вы должны определить, как дочерние представления будут отображаться в вашей ViewGroup в методе onLayout. Если вам не нужен какой-то специальный вид, попробуйте использовать FrameLayout вместо ViewGroup.

person cooperok    schedule 14.10.2013
comment
Я реализую приложение для рисования и собираюсь добавить линейные виды, прямоугольные виды, виды от руки в эту группу просмотра. Я новичок в рисовании вещей на Android, я не знаю, использую ли я правильный подход или нет. Но на данный момент я планирую использовать свой холст для рисования в качестве подкласса ViewGroup и планирую добавить в эту группу View Views of Lines и другие фигуры. - person Salman Khakwani; 14.10.2013
comment
Поделитесь, пожалуйста, простым кодом реализации onLayout(...). Это очень поможет. - person Salman Khakwani; 14.10.2013
comment
Спасибо за быстрый ответ ! :) - person Salman Khakwani; 14.10.2013