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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.61
Androot
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 27
#1

кнопка-картинка - Программирование Android

03.10.2012, 09:53. Просмотров 3609. Ответов 13
Метки нет (Все метки)

как сделать чтоб при нажатии на кнопку (кнопка-картинка ImageButton) через две секунды картинка этой кнопки менялась на другую, помогите пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2012, 09:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос кнопка-картинка (Программирование Android):

Кнопка в несколько строк (заголовок и описание) и картинка (слева или справа) - Программирование Android
Как сделать такую "многофункциональную" кнопку? Заголовок должен быть жирным шрифтом.

Картинка - Программирование Android
Текст у меня в ресурсе string Хочу в текст выложить картинку как это сделать? Пример: Текст Текст Текст <Картинка> Текст Текст.

Картинка и EditText - Программирование Android
хочу реализовать как бы ввод картинки в текстовое поле по тапу на кнопку. Чо то вообще ни понимаю куда двигатся. @Override ...

Картинка в SQLite - Программирование Android
Всем привет! В программе используется SQLite БД. Заполняю ListView из нее, встал вопрос каким образом хранить и вставлять картинки. На...

Картинка в картинке - Программирование Android
Здравствуйте! Недавно увидела на планшете Explay функцию картинка в картинке. Конкретно на примере плеера (родного гугловского). Меня...

Картинка по ширине и не сжата - Программирование Android
Скажите пожалуйста. Загружаю картинки из интернета в listView и они конечно разного размера загружаются. Каким образом можно сделать так...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
05.10.2012, 00:08 #2
присоединяешь onClickListener, там в методе onClick пишешь:
Java
1
2
3
4
5
6
imageView.postDelayed(new Runnable() {
            
            public void run() {
                imageView.setImageResource(R.drawable.new_image);           
            }
        }, 2000);
0
Androot
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 27
05.10.2012, 14:23  [ТС] #3
Цитата Сообщение от kvaka Посмотреть сообщение
присоединяешь onClickListener, там в методе onClick пишешь:
Java
1
2
3
4
5
6
imageView.postDelayed(new Runnable() {
            
            public void run() {
                imageView.setImageResource(R.drawable.new_image);           
            }
        }, 2000);
а можно как нибудь в потоке сделать??
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.10.2012, 22:17 #4
можно делать только в потоке.
0
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
05.10.2012, 22:44 #5
а можно как нибудь в потоке сделать??
Это ты и делаешь в потоке UI, просто с отсрочкой, как и хотел. Чем тебя такой вариант смущает?
0
Androot
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 27
06.10.2012, 03:46  [ТС] #6
Цитата Сообщение от kvaka Посмотреть сообщение
Это ты и делаешь в потоке UI, просто с отсрочкой, как и хотел. Чем тебя такой вариант смущает?
мне просто нужно просчитывать каждую секунду и выводить в текст
то есть прошла секунда текст обновился "1"
прошла еще секунда текст обновился "2" картинка поменялась
условие смены картинки у меня есть не могу только реализовать смену по веремени меня крешует как раз на смене картинки в моем коде.
ваш код работает но я не могу понять куда приписать текстовик чтоб онобновлялся каждую секунду с текстом времени.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.10.2012, 04:26 #7
вероятно, у вас крешует потому что вы пытаетесь изменить UI из не UI потока (в логах все написано).
способы делать что-то в UI потоке:
handler;
activity.runOnUiThread();
view.postDelayed, view.postDelayed;
AsyncTask.

вот пример

Java
1
2
3
4
5
6
7
8
Runnable r = new Runnable() {
 
            public void run() {
                textView.setText(String.valueOf(i));
                textView.postDelayed(r, 2000);
            }
        };
        textView.postDelayed(r, 2000);
0
Androot
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 27
06.10.2012, 04:51  [ТС] #8
Цитата Сообщение от V0v1k Посмотреть сообщение
вероятно, у вас крешует потому что вы пытаетесь изменить UI из не UI потока (в логах все написано).
способы делать что-то в UI потоке:
handler;
activity.runOnUiThread();
view.postDelayed, view.postDelayed;
AsyncTask.

вот пример

Java
1
2
3
4
5
6
7
8
Runnable r = new Runnable() {
 
            public void run() {
                textView.setText(String.valueOf(i));
                textView.postDelayed(r, 2000);
            }
        };
        textView.postDelayed(r, 2000);
все равно че то не то
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
Runnable r = new Runnable() {
 
                    public void run() {
                        count++;
                        tex.postDelayed(r, 1000);
                        result = rand.nextInt(51);
                        tex.setText("бросок..."+count);
                if(count==2){
                    tex.removeCallbacks(r);
                    if (result>25){
                        but.setImageResource(R.drawable.orel); крэш
                        
                        tex.setText("орел");  
                    }
                    else
                    {
                        but.setImageResource(R.drawable.reshka); крэш
                        
                        tex.setText("решка");  
                    }
                count=0;
                }
                
        
        
        
                
             
                    }};
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.10.2012, 05:06 #9
весь код покажите
0
Androot
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 27
06.10.2012, 05:30  [ТС] #10
Цитата Сообщение от V0v1k Посмотреть сообщение
весь код покажите
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
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import java.util.Random;
import android.widget.ImageButton;
import android.widget.TextView;
import java.lang.ref.WeakReference;
 
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.widget.ImageView;
 
public class MainActivity extends Activity {
     final Random rand = new Random();
     public static int result;
     private static final int MSG_REFRESH_UI = 100500;
        private TextView tex;
        //private RefreshTextView task;
        private Handler uiHandler;
        private int count=0;
        private ImageView but;
        
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView but = (ImageView)findViewById(R.id.imageButton1);
        tex = (TextView)findViewById(R.id.textView2);
        but.setImageResource(R.drawable.fon);
        tex.setText("нажми на кнопку, сделай выбор");
        uiHandler = new Handler();
        //task = new RefreshTextView();
        
        but.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                but.postDelayed(r,1);
                
                /*but.postDelayed(new Runnable() {
                    
                    public void run() {
                        but.setImageResource(R.drawable.reshka);           
                    }
                }, 2000);*/
         
                
            }});
       
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
   // private class RefreshTextView implements Runnable{
        
    Runnable r = new Runnable() {
 
                    public void run() {
                        count++;
                        tex.postDelayed(r, 1000);
                        result = rand.nextInt(51);
                        tex.setText("бросок..."+count);
                if(count==2){
                    tex.removeCallbacks(r);
                    if (result>25){
                        but.setImageResource(R.drawable.orel);
                        
                        tex.setText("орел");
                    }
                    else
                    {
                        but.setImageResource(R.drawable.reshka);
                        
                        tex.setText("решка");
                    }
                count=0;
                }
                
        
        
        
                
             
                    }};
   }
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.10.2012, 13:45 #11
выложите проект.
0
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
07.10.2012, 00:54 #12
Ты при создании класса объявляешь поле
Java
1
private ImageView but;
а потом в ОнКрит объявляешь одноименную переменную:

Java
1
final ImageView but = (ImageView)findViewById(R.id.imageButton1);
в результате - поле, объявленное первым остается null.

И еще: вот этот кусок
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Runnable r = new Runnable() {
 
                    public void run() {
                        count++;
                        tex.postDelayed(r, 1000);
                        result = rand.nextInt(51);
                        tex.setText("бросок..."+count);
                if(count==2){
                    tex.removeCallbacks(r);
                    if (result>25){
                        but.setImageResource(R.drawable.orel);
                        
                        tex.setText("орел");
                    }
                    else
                    {
                        but.setImageResource(R.drawable.reshka);
                        
                        tex.setText("решка");
                    }
                count=0;
                }
                    }};
у тебя не в методе, а значит r - поле класса. И значение ему присваивается в момент создания экземпляра класса, в тот момент часть объявленных полей не имеют присвоенных значений, поэтому тут будет НуллПоинтерЕкссепшн.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.10.2012, 01:17 #13
да, с but будет НуллПоинтерЕкссепшн здесь все верно, не понятно почему Androot логи не смотрит.
а вот что с r не так я не понял...

Добавлено через 4 минуты
Цитата Сообщение от kvaka Посмотреть сообщение
в тот момент часть объявленных полей не имеют присвоенных значений,
это не имеет значения...

Добавлено через 7 минут
главное чтобы в момент использования были не нулл
0
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
07.10.2012, 14:50 #14
ну да, тут я наверно не прав...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 14:50
Привет! Вот еще темы с ответами:

Почему не отрисовывается картинка? - Программирование Android
Написал класс, наследующий ViewSurface MainView. Написал метод onDraw, в котором поле заливается белым цветом, и вызывается метод draw...

Картинка не отображается в ImageView - Программирование Android
Помогите! Только начинаю изучать Android. Загружаю большую картинку в ImageView. Приложение загружается, работает, но картинка просто не...

Картинка становится некачественной - Программирование Android
Размер исходной картинки 96х96px через...

Своя картинка в TabHost - Программирование Android
Как загрузить свою картинку (там где кружочки нарисованы) ?


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

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

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