Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
sanek819
2 / 2 / 0
Регистрация: 15.06.2010
Сообщений: 13
#1

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

23.11.2013, 18:16. Просмотров 736. Ответов 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] и все это отобразилось с заданными отступами. Помогите, пожалуйста, разобраться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2013, 18:16     Создание кастомного View "Матрица"
Посмотрите здесь:

Как сделать View "не прозрачным" для кликов - Программирование Android
В общем имею много слойный экран, на нижнем - карта, выше - элементы управления и всякие доп поля. Сейчас есть табличка которая...

Как называется View, который представляет из себя "площадку" для размещения контента (на скриншоте) - Программирование Android
Здравствуйте! Пожалуйста, скажите, как называется View на скриншоте. То есть, вот у нас есть пост. И он размещён на белой &quot;площадке&quot;. Как...

Создание приложения в android "Транспортная карта" - Программирование Android
Доброго времени суток уважаемые гуру программирования на android! Появилась проблема, надо написать программу &quot;Транспортная карта&quot;,...

Создание приложения "Расписание по группам вуза" - Программирование Android
Доброго времени суток, пришло время работы над дипломом. Хочу создать приложение для андроид Расписание по группам вуза. Все данные...

Создание андроид приложения связанного с "Вконтакте" - Программирование Android
Всем привет! Появилась такая идея создать приложения для своей группы &quot;Вконтакте&quot;. Кто бы мог мне помочь?! Моя задача, что бы в...

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

Создание приложения "Кулинарный справочник" - Программирование Android
Здравствуйте киберфорумчане! Нужно создать приложение на подобии кулинарного справочника (менюшка и н-тое кол-во глав), но у меня возникли...

Пошаговое создание кнопки "back" - Программирование Android
ДОбрый день, подскажите пожалуйста пошагово, как создать в приложении кнопку &quot; вернуться назад&quot; Спасибо!

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

Динамическое создание View - Программирование Android
Есть шаблон: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...

Создание view элементов в отдельном потоке - Программирование Android
Беру данные из интернета и делаю блоки. Если информации довольно много то при запуске активности(где создаются эти блоки) сначала...

Создание View элементов из кода и размещение их в listview - Программирование Android
Здравствуйте, задача такая: 1) Есть массив строк. Программа читает поочереди элементы массива и проверяет его значение: Если...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.11.2013, 20:51     Создание кастомного View "Матрица" #2
как вариант
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);
        }
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
24.11.2013, 13:24     Создание кастомного View "Матрица" #3
По поводу, как передать данные, то это еще легче, просто в конструктор)
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 и вынесите как можно больше кода в неё, а ее уже вызывайте в конструкторе, это нужно для того, чтобы в будущем было проще добавить новый конструктор, если таковой понадобится...сам просто сталкивался с этим)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru