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

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

Войти
Регистрация
Восстановить пароль
 
 
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
#1

Canvas поместить в ScrollView - Программирование Android

12.09.2016, 07:45. Просмотров 224. Ответов 15
Метки нет (Все метки)

Я имею мой кастомный виев DrawView. Там в методе onDraw идет отрисовка. Но при попытке добавить мой виев вылетает ошибка. Добавляю так:
Java
1
2
DrawView dw = new DrawView();
myScroll.addView(dw);
Ошибка гласит: Attemp to invoke virtual method void android.widget.LinearLayout.addView(android.view.View) on a null object reference.
Помогите пожалуйста!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2016, 07:45     Canvas поместить в ScrollView
Посмотрите здесь:

ScrollView в Android 4.0.x - Программирование Android
имею HorizontalScrollView а в нем ScrollView, при прокрутки вниз если уклонится чуток вправо влево перестает скрол по вертикале (вроде тока...

Конец ScrollView - Программирование Android
Здравствуйте, уважаемые форумчане? Есть ли в ScrollView метод, который определяет, что ScrollView сейчас дошел до конца, или метод,...

Задать ScrollView программно - Программирование Android
Здраствуйте! Как сделать ScrollView с элементом LinearLayout программно? Делаю одно, не работает другое... ScrollView scroll = new...

ScrollView с динамическими представлениями - Программирование Android
Доброго времени суток! Есть scrollview, создаю его в xml. Нужно в нем разместить динамически несколько textview и button....

Constraintlayout внутри scrollview - Программирование Android
Проблема в том что полос прокрутки нет. А вроде должны быть. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" ...

ScrollView - добавление прокрутки - Программирование Android
Всем добра... Возникла проблема с ScrollView :-| Код разметки: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

IsSelectable textview in ScrollView - Программирование Android
Как понятно из названия темы, у меня хватило ума втулить isSelectable textview в ScrollView. Проблема в следующем, при клике на textview (к...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
12.09.2016, 08:56     Canvas поместить в ScrollView #2
Маловато информации (кода) для анализа. А почему бы его непосредственно в xml не добавить?
vxg
Модератор
3146 / 1948 / 214
Регистрация: 13.01.2012
Сообщений: 7,439
12.09.2016, 09:22     Canvas поместить в ScrollView #3
den_droid, в ошибке все написано - вместо вью прилетело null. причина по вашему тексту не видна
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:00  [ТС]     Canvas поместить в ScrollView #4
setContentView(dw) работает без ошибок
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
12.09.2016, 15:06     Canvas поместить в ScrollView #5
код будет этого чудо-класса или гадать надо?
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:15  [ТС]     Canvas поместить в ScrollView #6
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class DrawView extends View {
 
        Paint p;
        Path path;
        Matrix matrix;
        ArrayList elements = new ArrayList();
        ArrayList elementsCircle = new ArrayList();
 
        public DrawView(Context context) {
            super(context);
            p = new Paint();
            p.setStrokeWidth(50);
            p.setStyle(Paint.Style.STROKE);
 
            path = new Path();
            matrix = new Matrix();
        }
 
        public void add(int path) {
            elements.add(path);
        }
        public void paint(float x, float y, int color) {
            elementsCircle.add(x + "_" + y + "_" + color);
        }
        
        @Override
        protected void onDraw(final Canvas canvas) {
            canvas.drawARGB(100, 102, 204, 255);
 
            for (int i = 0; i < elementsCircle.size(); i++) {
                String[] circle = (""+elementsCircle.get(i)).split("_");
                p.setColor(Integer.parseInt(circle[2]));
                canvas.drawPoint(Float.parseFloat(circle[0]), Float.parseFloat(circle[1]), p);
            }
            
            for (int i = 0; i < elements.size(); i++) {
                Paint paint = new Paint();
 
                Bitmap bitmapSource = BitmapFactory.decodeResource(getResources(), elements.get(i));
 
                Matrix matrix2 = new Matrix();
                //matrix2.postScale(0, 0);
                matrix2.postScale(1, 1);
                matrix2.postRotate(45);
                //matrix.setTranslate(300, 400);
 
                Bitmap bitmap = Bitmap.createBitmap(bitmapSource, 0, 0, 64, 64, matrix2, true);
                canvas.drawBitmap(bitmap, 64*i, 0, paint);
            }
        }
 
    }
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
12.09.2016, 15:19     Canvas поместить в ScrollView #7
класса, в котором эта строчка myScroll.addView(dw);
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
12.09.2016, 15:28     Canvas поместить в ScrollView #8
Я заранее извиняюсь, но не маловато конструкторов? Я имею в виду
Java
1
2
3
4
5
6
7
8
9
10
11
public DrawView(Context context) {
        this(context, null);
    }
 
    public DrawView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
 
    public DrawView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:31  [ТС]     Canvas поместить в ScrollView #9
OlegJV, впервые про них слышу. Они обязательны?

Добавлено через 1 минуту
Паблито, Я пробовал и с хмл и без него.
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
30
31
public class MainActivity extends Activity 
{
    
    int height;
    int width;
    DrawView dw = null;
 
    @Override
    protected void onResume()
    {
        super.onResume();
        height = getWindowManager().getDefaultDisplay().getHeight();
        width = getWindowManager().getDefaultDisplay().getWidth();
        
        try {
        LinearLayout lin = (LinearLayout)findViewById(R.id.layout);
        ScrollView scroll = (ScrollView)findViewById(R.id.scrollView);
        
        dw = new DrawView(this);
        //lin.addView(dw);
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
        dw.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View p1, MotionEvent p2) {
                    dw.paint(p2.getX(), p2.getY(), 0xFF000000);
                    return false;
                }
            });
        setContentView(R.layout.main);
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
12.09.2016, 15:32     Canvas поместить в ScrollView #10
Ну по крайней мере когда я пихал свои View в xml разметку компилятор явно их требовал. В коде добавлять View я как-то не пробовал еще...
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
12.09.2016, 15:38     Canvas поместить в ScrollView #11
вообще хватает двух конструкторов, даже третий, который defStyle принимает - не так и обязателен

Добавлено через 3 минуты
ну и где там эта строчка на которую ошибка показывает?
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:39  [ТС]     Canvas поместить в ScrollView #12
Паблито, тогда в чем может быть проблема? Если setContentView работает...

Добавлено через 39 секунд
Паблито, lin.addView(dw). Тут происходит ошибка.
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
12.09.2016, 15:41     Canvas поместить в ScrollView #13
Java
1
setContentView(R.layout.main);
эта строка олжна быть в onCreate, а не в onResume

Добавлено через 33 секунды
try-catch тоже убрать надо из onResume
что за бредятина вообще?
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:55  [ТС]     Canvas поместить в ScrollView #14
Паблито, происходит тоже самое.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Override
    public void onCreate(Bundle savedInstanceState)
    {
        
        try {
            LinearLayout lin = (LinearLayout)findViewById(R.id.layout);
            
            lin.addView(new DrawView(this));
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
        setContentView(R.layout.main);
        super.onCreate(savedInstanceState);
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 15:57     Canvas поместить в ScrollView
Еще ссылки по теме:

Узнать ширину ScrollView - Программирование Android
Всем привет!!! Разрабатываю приложение под Android 4.1 API 16. Не могу программно узнать ширину ScrollView. Использовал методы которые...

Диаграмма (BarChart) - ScrollView - Программирование Android
Всем привет. Нужна помощь. Необходимо сделать график, который на картинке (BarChart). В качестве столбцов рекомендуется использовать View,...

Отображение ScrollView в LinearLayout - Программирование Android
Привет всем! Вобщем, есть 3 Layout. Две из них не прокручиваются (1, 3) одна должна прокручиваться. ------------ Layout 1 ...

ScrollView для Dialog - Программирование Android
Ребят столкнулся с проблемой при создании диалога с динамические элементами, не могу добавить в него Scrollview Спасибо заранее

Автоматическая прокрутка ScrollView - Программирование Android
Имеется ScrollView, а внутри него LinearLayout, в котором находятся кнопки. Как сделать так, чтобы на тех экранах, где прокрутка нужна,...


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

Или воспользуйтесь поиском по форуму:
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
12.09.2016, 15:57     Canvas поместить в ScrollView #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
должны быть так
Java
1
2
3
4
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout lin = (LinearLayout)findViewById(R.id.layout);
        lin.addView(new DrawView(this));
ты вообще хоть какие-то уроки смотрел или программируешь наугад?
Yandex
Объявления
12.09.2016, 15:57     Canvas поместить в ScrollView
Ответ Создать тему
Опции темы

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