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

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

Войти
Регистрация
Восстановить пароль
 
SnapeEye
5 / 5 / 1
Регистрация: 16.05.2013
Сообщений: 341
Завершенные тесты: 1
#1

Рисование на экране - приложение не запускается - Программирование Android

13.05.2017, 21:29. Просмотров 200. Ответов 2
Метки нет (Все метки)

Доброго времени суток!

Пробую написать рисовалку с выбором цвета и толщины линии.

Есть 2 оброботчика выбора для Spinner-ов выбора цвета и толщины, перегруженный обработчик касаний (onTouch), а также создан контекст для рисования на экране, однако приложение даже не запускается... (может написано и верно, однако приложение не запускается).

Возможно кто-то скажет в чем проблема? Делал в Android Studio.

Буду рад любым комментариям, замечаниям и помощи. Заранее благодарю всех!

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
public class Drawer extends AppCompatActivity implements View.OnTouchListener
{
    Paint paint = new Paint();
 
    float old_x;
    float old_y;
    float x;
    float y;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
 
        // Content for drawing
        setContentView(new Draw(this));
 
        // Colors spinner
        Spinner spinnerC = (Spinner) findViewById(R.id.spinner_color);
        ArrayAdapter<CharSequence> adapterC = ArrayAdapter.createFromResource(this,
                R.array.spinner_color,android.R.layout.simple_spinner_item);
        adapterC.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerC.setAdapter(adapterC);
        spinnerC.setOnItemSelectedListener(new SpinnerColorActivity());
 
        // Width spinner
        Spinner spinnerW = (Spinner) findViewById(R.id.spinner_width);
        ArrayAdapter<CharSequence> adapterW = ArrayAdapter.createFromResource(this,
                R.array.spinner_width,android.R.layout.simple_spinner_item);
        adapterW.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerW.setAdapter(adapterW);
        spinnerW.setOnItemSelectedListener(new SpinnerWidthActivity());
    }
 
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        x = event.getX();
        y = event.getY();
 
        switch(event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                old_x = x;
                old_y = y;
                break;
            case MotionEvent.ACTION_MOVE:
                v.invalidate();
 
                old_x = x;
                old_y = y;
                break;
        }
 
        return true;
    }
 
    public class Draw extends View
    {
        public Draw(Context context)
        {
            super(context);
        }
 
        @Override
        protected void onDraw(Canvas canvas)
        {
            canvas.drawLine(old_x,old_y,x,y,paint);
        }
    }
 
    public class SpinnerColorActivity extends Activity implements AdapterView.OnItemSelectedListener
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            String choice = (String)parent.getItemAtPosition(position);
 
            switch(choice)
            {
                case "Black":
                    paint.setColor(Color.BLACK);
                    break;
                case "Yellow":
                    paint.setColor(Color.YELLOW);
                    break;
                case "Red":
                    paint.setColor(Color.RED);
                    break;
                case "Blue":
                    paint.setColor(Color.BLUE);
                    break;
            }
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
            // nothing
        }
    }
 
    public class SpinnerWidthActivity extends Activity implements AdapterView.OnItemSelectedListener
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            String choice = (String)parent.getItemAtPosition(position);
 
            switch(choice)
            {
                case "1":
                    paint.setStrokeWidth(1);
                    break;
                case "2":
                    paint.setStrokeWidth(2);
                    break;
                case "5":
                    paint.setStrokeWidth(5);
                    break;
                case "10":
                    paint.setStrokeWidth(10);
                    break;
            }
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
            // nothing
        }
    }
}
Файл strings.xml:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<resources>
    <string name="app_name">Drawer</string>
 
    <string-array name="spinner_color">
        <item>Black</item>
        <item>Yellow</item>
        <item>Red</item>
        <item>Blue</item>
    </string-array>
 
    <string-array name="spinner_width">
        <item>1</item>
        <item>2</item>
        <item>5</item>
        <item>10</item>
    </string-array>
</resources>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2017, 21:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рисование на экране - приложение не запускается (Программирование Android):

Приложение запускается из play, но не запускается с рабочего стола - Программирование Android
Добрый день всем! В чем может быть проблема, если приложение отлично запускается с google play, но не запускается с рабочего стола? В чем...

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

Не запускается приложение - Программирование Android
Привет! Пишу калькулятор. Но не смотря на то что ошибок в коде нет, приложение не запускаются... вот код package com.example.app; ...

Не запускается приложение - Программирование Android
Здравствуйте, запускаю свое первое приложение и не получается. 1. Создал эмулятор 2. Хочу создать свое приложение , нажимаю Run...

Не запускается приложение - Программирование Android
Код приложения: package com.workplz.theappitself; import java.util.Calendar; import android.os.Bundle; import...

Не запускается приложение - Программирование Android
Есть простенькое приложение (ошибки не показывает) package com.ttx; import android.app.Activity; import android.os.Bundle; ...

2
vxg
Модератор
3224 / 2027 / 231
Регистрация: 13.01.2012
Сообщений: 7,867
14.05.2017, 10:47 #2
SnapeEye, лог где?
0
SnapeEye
5 / 5 / 1
Регистрация: 16.05.2013
Сообщений: 341
Завершенные тесты: 1
14.05.2017, 13:14  [ТС] #3
Вот лог c crash места (извиняюсь за задержку):

--------- beginning of crash
05-14 05:25:44.942 2807-2807/com.drawer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.drawer, PID: 2807
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.drawer/com.drawer.Drawer}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at com.drawer.Drawer.onCreate(Drawer.java:39)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)*
at android.app.ActivityThread.-wrap11(ActivityThread.java)*
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)*
at android.os.Handler.dispatchMessage(Handler.java:102)*
at android.os.Looper.loop(Looper.java:148)*
at android.app.ActivityThread.main(ActivityThread.java:5417)*
at java.lang.reflect.Method.invoke(Native Method)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)*
05-14 05:25:45.065 1645-1957/system_process W/ActivityManager: Force finishing activity com.drawer/.Drawer

[ 05-14 05:25:45.093 1645: 1957 D/ ]
HostConnection::get() New Host Connection established 0xda7bdcd0, tid 1957
05-14 05:25:45.125 1565-1565/? E/EGL_emulation: tid 1565: eglCreateSyncKHR(1215): error 0x3004 (EGL_BAD_ATTRIBUTE)
05-14 05:25:45.177 1645-1664/system_process W/art: Long monitor contention event with owner method=android.graphics.Bitmap com.android.server.wm.WindowManagerService.screenshotApplicationsInner(android.os.IBinder, int, int, int, boolean) from WindowManagerService.java:6223 waiters=0 for 106ms
05-14 05:25:45.203 1645-2858/system_process D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
05-14 05:25:45.282 1645-2858/system_process I/OpenGLRenderer: Initialized EGL, version 1.4

[ 05-14 05:25:45.283 1645: 2858 D/ ]
HostConnection::get() New Host Connection established 0xdac42970, tid 2858
05-14 05:25:45.370 1645-2858/system_process W/EGL_emulation: eglSurfaceAttrib not implemented
05-14 05:25:45.370 1645-2858/system_process W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xda7f5280, error=EGL_SUCCESS
05-14 05:25:45.692 1645-1659/system_process W/ActivityManager: Activity pause timeout for ActivityRecord{f454f49 u0 com.drawer/.Drawer t2 f}
05-14 05:25:45.783 1891-2240/com.android.launcher3 W/EGL_emulation: eglSurfaceAttrib not implemented
05-14 05:25:45.783 1891-2240/com.android.launcher3 W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe823e500, error=EGL_SUCCESS
05-14 05:25:45.860 1645-1955/system_process I/ActivityManager: Killing 2352:com.android.settings/1000 (adj 15): empty #17
05-14 05:25:46.694 1891-2240/com.android.launcher3 V/RenderScript: 0xdf0f9000 Launching thread(s), CPUs 2
05-14 05:25:46.779 1891-2240/com.android.launcher3 W/OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
05-14 05:25:46.779 1891-2240/com.android.launcher3 W/OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
05-14 05:25:49.230 1645-1657/system_process I/ActivityManager: Killing 2425:com.android.dialer/u0a5 (adj 15): empty #17
05-14 05:25:55.897 1645-1659/system_process W/ActivityManager: Activity destroy timeout for ActivityRecord{f454f49 u0 com.drawer/.Drawer t2 f}

Добавлено через 10 минут
Код немного поменялся (изменения вносились до прошлого лога):

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
public class Drawer extends AppCompatActivity
{
    Paint paint = new Paint();
 
    float old_x;
    float old_y;
    float x;
    float y;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        // Content for drawing
        setContentView(new Draw2D(this));
 
        // Colors spinner
        Spinner spinnerC = (Spinner) findViewById(R.id.spinner_color);
        ArrayAdapter<CharSequence> adapterC = ArrayAdapter.createFromResource(this,
                R.array.spinner_color,android.R.layout.simple_spinner_item);
        adapterC.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerC.setAdapter(adapterC);
        spinnerC.setOnItemSelectedListener(new SpinnerColorActivity());
 
        // Width spinner
        Spinner spinnerW = (Spinner) findViewById(R.id.spinner_width);
        ArrayAdapter<CharSequence> adapterW = ArrayAdapter.createFromResource(this,
                R.array.spinner_width,android.R.layout.simple_spinner_item);
        adapterW.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerW.setAdapter(adapterW);
        spinnerW.setOnItemSelectedListener(new SpinnerWidthActivity());
    }
 
    public class Draw2D extends View
    {
        public Draw2D(Context context)
        {
            super(context);
        }
 
        @Override
        protected void onDraw(Canvas canvas)
        {
            canvas.drawLine(old_x,old_y,x,y,paint);
        }
 
        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
            x = event.getX();
            y = event.getY();
 
            switch(event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    old_x = x;
                    old_y = y;
                    break;
                case MotionEvent.ACTION_MOVE:
                    invalidate();
 
                    old_x = x;
                    old_y = y;
                    break;
            }
 
            return true;
        }
    }
 
    public class SpinnerColorActivity extends Activity implements AdapterView.OnItemSelectedListener
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            String choice = (String)parent.getItemAtPosition(position);
 
            switch(choice)
            {
                case "Black":
                    paint.setColor(Color.BLACK);
                    break;
                case "Yellow":
                    paint.setColor(Color.YELLOW);
                    break;
                case "Red":
                    paint.setColor(Color.RED);
                    break;
                case "Blue":
                    paint.setColor(Color.BLUE);
                    break;
            }
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
        }
    }
 
    public class SpinnerWidthActivity extends Activity implements AdapterView.OnItemSelectedListener
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            String choice = (String)parent.getItemAtPosition(position);
 
            switch(choice)
            {
                case "1":
                    paint.setStrokeWidth(1);
                    break;
                case "2":
                    paint.setStrokeWidth(2);
                    break;
                case "5":
                    paint.setStrokeWidth(5);
                    break;
                case "10":
                    paint.setStrokeWidth(10);
                    break;
            }
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
        }
    }
}
Добавлено через 25 минут
Я так подозреваю, что проблема в контексте...

Когда я меняю базовую строку
Java
1
2
3
4
5
6
7
@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
        ...
}
на свой контент для рисования
Java
1
2
3
4
5
6
7
protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        // Content for drawing
        //setContentView(new Draw2D(this));
}
то приложение открывается, однако
Java
1
Spinner spinnerC = (Spinner) findViewById(R.id.spinner_color);
возвращает null, т.е. из-за смены контекста не находятся элементы на форме

Как бы сделать так, чтобы и элементы находились, и рисовать можно было?)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2017, 13:14
Привет! Вот еще темы с ответами:

Не запускается приложение в эмуляторе - Программирование Android
Здравствуйте. Подскажите, пожалуйста причину. У меня не запускается приложение в эмуляторе(сам эмулятор запускается), и что самое...

Не запускается приложение на эмуляторе - Программирование Android
Добрый день! Пишу на Android studio (java 1.8). Сам компилятор не выдает ошибок , а вот на эмуляторе не запускается (Андроид пишет...

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

Приложение компилируется, но не запускается - Программирование Android
при компилировании ошибки не выдает. код перепроверил, все работает нормально! но при запуске на телефоне или планшете выдает ошибку...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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