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

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

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

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

12.09.2016, 07:45. Просмотров 241. Ответов 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.
Помогите пожалуйста!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2016, 07:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Canvas поместить в ScrollView (Программирование Android):

ScrollView - Программирование Android
Добрый день! Работаю с обычным ScrollView. Получаю что-то типа: Подскажите пожалуйста, можно ли настроить ScrollView, чтобы получить...

ScrollView - Программирование Android
Привет) Работаю со ScrollView у меня есть например 5 изображений, грубо говоря каждое отвечает за свой функционал, как при прокрутке мне...

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

Промотать ScrollView - Программирование Android
Экран содержит ScrolView, на нем находятся элементы (например кнопки). Можно ли сразу показать не начало ScrollView, а показать нижние...

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

Listview and scrollview - Программирование Android
Здравствуйте у меня такая проблема. есть LinearLayout в котором чередуется textview и динамический listview. Пролема в том что...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 08:56 #2
Маловато информации (кода) для анализа. А почему бы его непосредственно в xml не добавить?
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,522
12.09.2016, 09:22 #3
den_droid, в ошибке все написано - вместо вью прилетело null. причина по вашему тексту не видна
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:00  [ТС] #4
setContentView(dw) работает без ошибок
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
12.09.2016, 15:06 #5
код будет этого чудо-класса или гадать надо?
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:15  [ТС] #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);
            }
        }
 
    }
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
12.09.2016, 15:19 #7
класса, в котором эта строчка myScroll.addView(dw);
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 15:28 #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);
    }
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:31  [ТС] #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);
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
12.09.2016, 15:32 #10
Ну по крайней мере когда я пихал свои View в xml разметку компилятор явно их требовал. В коде добавлять View я как-то не пробовал еще...
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
12.09.2016, 15:38 #11
вообще хватает двух конструкторов, даже третий, который defStyle принимает - не так и обязателен

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

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

Добавлено через 33 секунды
try-catch тоже убрать надо из onResume
что за бредятина вообще?
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 190
12.09.2016, 15:55  [ТС] #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);
    }
0
Pablito
2484 / 1929 / 601
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
12.09.2016, 15:57 #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));
ты вообще хоть какие-то уроки смотрел или программируешь наугад?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 15:57
Привет! Вот еще темы с ответами:

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

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

Данные в ScrollView по середине - Программирование Android
Всем привет у меня возникла проблема размещения данных в ScrollView по середине. Дело в том что когда размещаешь данные по середине в...

ScrollView под кнопками - Программирование Android
Не могу никак добиться, что бы ScrollView был до кнопок. Сейчас же он прокручивается и под кнопками. Как это исправить? &lt;RelativeLayout...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.09.2016, 15:57
Ответ Создать тему
Опции темы

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