Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
SnapeEye
5 / 5 / 7
Регистрация: 16.05.2013
Сообщений: 341
Завершенные тесты: 1
#1

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

13.05.2017, 21:29. Просмотров 217. Ответов 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
Ответы с готовыми решениями:

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

Сделать приложение постоянно отображающееся на экране
Всем привет. Нужно чтобы приложение всегда было включено и не гас экран. Вроде...

Не запускается приложение
Код приложения: package com.workplz.theappitself; import...

Не запускается приложение
Есть простенькое приложение (ошибки не показывает) package com.ttx; import...

Не запускается приложение
Привет! Пишу калькулятор. Но не смотря на то что ошибок в коде нет, приложение...

2
vxg
Модератор
3246 / 2047 / 322
Регистрация: 13.01.2012
Сообщений: 7,926
14.05.2017, 10:47 #2
SnapeEye, лог где?
0
SnapeEye
5 / 5 / 7
Регистрация: 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

Не запускается приложение
Здравствуйте, вот такой вопрос, создал в Eclipse новый проект (с нуля, а не как...

Не запускается приложение
Здравствуйте, запускаю свое первое приложение и не получается. 1. Создал...

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


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

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

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