Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 15.06.2010
Сообщений: 13

Создание кастомного View "Матрица"

23.11.2013, 18:16. Показов 2266. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Взялся за написание компонента, который отображает матрицу произвольного размера.

Java
1
2
3
4
public class MatrixView extends View
{
    private int rows, columns; //Число строк, столбцов матрицы
    private EditText[][] matrix; //Двумерный массив, содержащий поля ввода
Идея была такая: пользователь вводит размерность матрицы, жмет "Ввести матрицу", после чего отображается компонент MatrixView с таким размером, который ввел пользователь. Затем пользователь заполняет матрицу(вводит значения в EditText-ы) и жмет "Сохранить матрицу", после чего сохраняется двумерный массив double-ов с введенной матрицей.
Конструктор класса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public MatrixView(Context context)
    {
        super(context);
        matrix = new EditText[rows][columns];
 
        for(int i = 0;i < rows;i++)
        {
            for(int j = 0;j < columns;j++)
            {
                matrix[i][j] = new EditText(context);
                matrix[i][j].setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL); //Поля для ввода десятичных чисел
            }
        }
    }
Тут сразу возник вопрос: Как передать компоненту размеры, которые ввел пользователь, чтобы записать их в rows и columns?
Еще возник другой вопрос, а как это рисовать?
Единственное, что пришло в голову
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        @Override
    protected void onDraw(Canvas canvas) //Метод отрисовки
    {
        super.onDraw(canvas);
        
        int widthTail = getWidth()/(columns + 1); //Ширина одного EditText-а
        int heightTail = widthTail*3/4; //Высота одного EditText-а
 
                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        
        int leftMargin = (getWidth() - rows*widthTail)/(rows + 1); //Отступ слева каждого EditText-a
        int rightMargin = leftMargin; //Отступ справа каждого EditText-a
        int topMargin = (getHeight() - columns*heightTail)/(columns + 1); //Отступ сверху каждого EditText-a
        int bottomMargin = topMargin; //Отступ снизу каждого EditText-a
        
        for(int i = 0;i < rows;i++)
        {
            int topM = (i + 1)*topMargin + i*heightTail; //Отступ рисуемого EditText-a от верхнего края
            int bottomM = (rows - i)*bottomMargin + (rows - i - 1)*heightTail; //Отступ рисуемого EditText-a от нижнего края
            for(int j = 0;j < columns;j++)
            {
                int leftM = (j + 1)*leftMargin + j*widthTail; //Отступ рисуемого EditText-a от левого края
                int rightM = (columns - j)*rightMargin + (columns - j - 1)*widthTail; //Отступ рисуемого EditText-a от правого края
                lp.setMargins(leftM, topM, rightM, bottomM);
                matrix[i][j].setLayoutParams(lp);
                matrix[i][j].draw(canvas);
            }
        }
    }
Не могу понять, как сделать так, чтобы пользователь ввел размерность матрицы, после этого создался компонент с заданной пользователем размерностью, создался массив EditText[rows][columns] и все это отобразилось с заданными отступами. Помогите, пожалуйста, разобраться.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2013, 18:16
Ответы с готовыми решениями:

Вылетает программа при выборе пункта в диалоговом окне (AlertDialog) для кастомного View
Есть MainActivity.java В нем есть функция: public void onClickSettings(View view) { startActivity(new Intent(this,...

Динамическое создание кастомного layout
Всем здрасте. Столкнулся с такой проблемой. Стоит задача по нажатию на динамически созданный едит текст в леяуте (с едит текстом и кнопкой...

Создание кастомного календаря с динамическими данными
Раз с одной проблемой мне тут помогли, значит попробую еще раз может и тут мне чем то помогут (: В общем проблема состоит в том что есть...

2
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
23.11.2013, 20:51
как вариант
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
LinearLayout parent = (LinearLayout) getView().findViewById(R.id.ll);
        for(int i=0; i < rows; i++) {
            
            LinearLayout ll = new LinearLayout(getActivity());
            ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            
            for(int j=0; j<colums; j++) {
                EditText et = new EditText(getActivity());
                et.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
                ll.addView(et);
            }
            parent.addView(ll);
        }
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
24.11.2013, 13:24
По поводу, как передать данные, то это еще легче, просто в конструктор)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public MatrixView(Context context, int rows, int columns)
    {
        super(context);
        this.rows = rows;
        this.columns = columns;
        matrix = new EditText[rows][columns];
 
        for(int i = 0;i < rows;i++)
        {
            for(int j = 0;j < columns;j++)
            {
                matrix[i][j] = new EditText(context);
                matrix[i][j].setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL); //Поля для ввода десятичных чисел
            }
        }
    }
Добавлено через 2 минуты
И еще совет не большой, не лепите все построение в конструктор, создайте private функцию, назовите ее, например, builder и вынесите как можно больше кода в неё, а ее уже вызывайте в конструкторе, это нужно для того, чтобы в будущем было проще добавить новый конструктор, если таковой понадобится...сам просто сталкивался с этим)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2013, 13:24
Помогаю со студенческими работами здесь

Создание кастомного вью с добавлением дочерних компонентов
Добрый день. Я новичек в разработке андроида, перешел с C# Есть задача построить фиксированный контейнер который будет заполнятся...

Создание кастомного адаптера и использование метода Startactivityforresult
Помогите пожалуйста, никак не могу решить данное задание. Сделать предложение которое будет включать 3 окна. Окно включает 2 кнопки:...

Перерисовка кастомного View
Доброго времени суток! У меня есть класс, унаследованных от UIView, отрисовка объекта этого класса прописана в методе drawRect:. Мне...

Реализация кастомного View для PopupWindow
Для констектного меню (вплывающего окна) нужно создать прямоугольник со скругленными углами, обводкой и небольшую стрелку, которая будет...

Получить стандартный атрибут в конструкторе кастомного View
Здравствуйте. Делаю кастомную вьюшку и хочу задать ей свой бекграунд по дефолту. Если просто назначить его в конструкторе - не получится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru