Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
#1

Почему этот цикл выполняется один раз?

30.07.2013, 00:33. Просмотров 892. Ответов 12
Метки нет (Все метки)

Canvas, прорисовав один раз все изображения, останавливается, а задача в том чтобы изображения менялись как слайды. Подскажите, что не так?

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
private void draw() {
            SurfaceHolder holder = getSurfaceHolder();
            Canvas c = null;
            try {
                c = holder.lockCanvas();
                   if (c != null) 
                   {
                    Paint p = new Paint();
                    p.setAntiAlias(true);
                  
 
                           
for (int slide = 0; slide < 10; slide++) {      
c.drawBitmap(pic1, 100, 100, p);  
c.drawBitmap(pic2, 100, 100, p);
c.drawBitmap(pic3, 100, 100, p);
c.drawBitmap(pic4, 100, 100, p);
c.drawBitmap(pic5, 100, 100, p);
c.drawBitmap(pic6, 100, 100, p);
c.drawBitmap(pic7, 100, 100, p);
System.out.print(slide);
}
 
                }
            
            } finally {
                if (c != null)
                    holder.unlockCanvasAndPost(c);
                
               
            }
            mHandler.removeCallbacks(mUpdateDisplay);
            if (mVisible) {
                mHandler.postDelayed(mUpdateDisplay, 20);
   }
  }
 }
}

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 00:33
Ответы с готовыми решениями:

OnTouch MotionEvent в андроид выполняется только один раз
Так вот сам вопрос: MotionEvent.ACTION_UP выполняется только первый раз, что...

Почему сервис выполняется с ошибкой (вывод картинки поверх всех окон)
Здравствуйте. Мне нужно реализовать вывод картинки поверх всех окон (в...

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

Обновление данных один раз в сутки
Здравствуйте, участники форума. Чувствую что объяснить будет не просто, но я...

Как определить, платил ли пользователь хоть один раз?
Как можно получить true или false, платил ли юзер хоть раз со своего аккаунта в...

12
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.07.2013, 00:47 #2
10 раз подряд прорисовываете одни и те же картинки в одном и том же месте, не представляю как у вас здесь должны были слайды получиться.
0
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
30.07.2013, 00:51  [ТС] #3
почему одни и те же? картинки разные, если поменять их координаты, они так же прорисуются один раз и цикл остановится
0
name?
198 / 169 / 52
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
30.07.2013, 01:20 #4
У вас картинка зарисовываеться картинкой по этому нужно сделать примерно так
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
int countPicture = 0;
private void draw() {
            SurfaceHolder holder = getSurfaceHolder();
            Canvas c = null;
            try {
                c = holder.lockCanvas();
                   if (c != null) 
                   {
                    Paint p = new Paint();
                    p.setAntiAlias(true);
                  
 
switch(countPicture){
case 0 : c.drawBitmap(pic1, 100, 100, p);  break;
case 10 : c.drawBitmap(pic2, 100, 100, p);  break;
case 20 : c.drawBitmap(pic3, 100, 100, p);  break;
case 30 : c.drawBitmap(pic4, 100, 100, p);  break;
case 40 : c.drawBitmap(pic5, 100, 100, p);  break;
case 50 : c.drawBitmap(pic6, 100, 100, p);  break;
case 60 : c.drawBitmap(pic7, 100, 100, p);  break;
}                           
                }
            
            } finally {
                if (c != null)
                    holder.unlockCanvasAndPost(c);
                
               
            }
            mHandler.removeCallbacks(mUpdateDisplay);
            if (mVisible) {
                mHandler.postDelayed(mUpdateDisplay, 20);
   }
  }
 }
countPicture++;
if(countPicture == 70) countPicture =0;
}
1
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
31.07.2013, 00:32  [ТС] #5
подскажите, пожалуйста, для уменьшения кода как pic1, pic2 и т.д. взять в цикл?
Просто переменную типа char Bitmap не рассматривает
0
name?
198 / 169 / 52
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
01.08.2013, 05:33 #6
не знаю может есть удобнее вариант, но можно так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Bitmap picture;
int count = 0;
final int MAX_COUNT = 100;
 
public void myTimer(){
if(count == MAX_COUNT ) count = 0;
picture= BitmapFactory.decodeResource(getResources(), R.drawable.picture1 + count); 
count++;
}
 
public void draw(Canvas canvas) {
canvas.drawBitmap(picture, 100, 100, new Paint()); 
}
1
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
06.08.2013, 01:16  [ТС] #7
Не работает у меня этот цикл, хоть убейте
Я так понимаю, переменная Bitmap picture, должна быть не переменной а массивом, подскажите как это здесь сделать?
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
public class MainActivity extends WallpaperService {
 
    @Override
    public Engine onCreateEngine() {
        return new DemoWallpaperEngine();
    }
    private class DemoWallpaperEngine extends Engine {
               
        Bitmap picture;
        int count = 0;
        final int MAX_COUNT = 50;
              
        {   if(count == MAX_COUNT ) count = 0;
            
                picture= BitmapFactory.decodeResource(getResources(), R.drawable.p01 + count); 
            count++;
            }
        private boolean mVisible = false;
        private final Handler mHandler = new Handler();
        private final Runnable mUpdateDisplay = new Runnable() {
            public void run() {
                draw();
            }
        };
                
        private void draw() {
                    SurfaceHolder holder = getSurfaceHolder();
                    Canvas c = null;
                    int count = 0;
                    final int MAX_COUNT = 50;
                    try {
                        c = holder.lockCanvas();
                           if (c != null) 
                           {
                            Paint p = new Paint();
                            p.setAntiAlias(true);
         {if(count == MAX_COUNT ) count = 0;                                   
         c.drawBitmap(picture, 0, 0, p);
         count++;
         }                 
       }
                } finally {
                        if (c != null)
                            holder.unlockCanvasAndPost(c);
                          
                       
                    }
                    mHandler.removeCallbacks(mUpdateDisplay);
                    if (mVisible) {
                        mHandler.postDelayed(mUpdateDisplay, 20);
          }
         }
        }
       }
0
name?
198 / 169 / 52
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
06.08.2013, 08:51 #8
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
public class MainActivity extends WallpaperService {
 
    @Override
    public Engine onCreateEngine() {
        return new DemoWallpaperEngine();
    }
    
    
    private class DemoWallpaperEngine extends Engine {
               
        Timer timer = new Timer();     
        Bitmap picture;
        int count = 0;
        final int MAX_COUNT = 50;
              
        public DemoWallpaperEngine(){
        timer.schedule(new TimerTask() {
            
            @Override
            public void run() {
                if(count == MAX_COUNT ) count = 0;
           
                    picture= BitmapFactory.decodeResource(getResources(), R.drawable.p01 + count); 
                    count++;
            }
        }, 0,80);
        
        }     
        
            
        private boolean mVisible = false;
        private final Handler mHandler = new Handler();
        private final Runnable mUpdateDisplay = new Runnable() {
            public void run() {
                draw();
            }
        };
                
        private void draw() {
                    SurfaceHolder holder = getSurfaceHolder();
                    Canvas c = null;
 
 
                    try {
                        c = holder.lockCanvas();
                           if (c != null) 
                           {
                            Paint p = new Paint();
                            p.setAntiAlias(true);                              
         c.drawBitmap(picture, 0, 0, p);
                          
       }
                } finally {
                        if (c != null)
                            holder.unlockCanvasAndPost(c);
                          
                       
                    }
                    mHandler.removeCallbacks(mUpdateDisplay);
                    if (mVisible) {
                        mHandler.postDelayed(mUpdateDisplay, 20);
          }
         }
        }
       }
где-то так
1
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
07.08.2013, 02:02  [ТС] #9
Теперь вылетает приложение и пишет такие логи.
Кстати, когда я вручную прописывала все 50 картинок в коде, то приложение также закрывалось с этими же ошибками. если в коде было 5 картинок - приложение работало если шесть - вылетало.
С последним кодом - уменьшала final int MAX_COUNT = 4; и все равно приложение при запуске вылетает с ошибкой.
Тестировала на разных эмуляторах и на обычном телефоне.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
08-07 01:49:52.249: E/AndroidRuntime(1392): FATAL EXCEPTION: main
08-07 01:49:52.249: E/AndroidRuntime(1392): java.lang.NullPointerException
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.graphics.Canvas.throwIfRecycled(Canvas.java:1025)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.graphics.Canvas.drawBitmap(Canvas.java:1065)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at com.krasnodar.shadowstheatre.MainActivity$DemoWallpaperEngine.draw(MainActivity.java:97)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at com.krasnodar.shadowstheatre.MainActivity$DemoWallpaperEngine.onSurfaceChanged(MainActivity.java:61)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:693)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:781)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1037)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.os.Looper.loop(Looper.java:137)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at android.app.ActivityThread.main(ActivityThread.java:5041)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at java.lang.reflect.Method.invokeNative(Native Method)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at java.lang.reflect.Method.invoke(Method.java:511)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-07 01:49:52.249: E/AndroidRuntime(1392):     at dalvik.system.NativeStart.main(Native Method)
в чем может быть дело?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.08.2013, 02:19 #10
NullPointerException вылетает при обращении к неинициализированной перемене.
0
name?
198 / 169 / 52
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
07.08.2013, 11:29 #11
там просто не был инициализирован таймер, вот рабочий пример
1
Вложения
Тип файла: rar changePicture.rar (917.2 Кб, 3 просмотров)
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
09.08.2013, 00:46  [ТС] #12
Цитата Сообщение от name? Посмотреть сообщение
там просто не был инициализирован таймер
а как в моем примере инициализировать таймер?
0
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 107
09.08.2013, 01:37  [ТС] #13
Прикрепляю
0
Вложения
Тип файла: zip Shadows.zip (8.46 Мб, 1 просмотров)
09.08.2013, 01:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 01:37

Почему месяц получается на один больше?
Почему я создаю время 23.02.2015 17:30:00 и получаю 2015 &quot;03&quot; 23T173000 вместо...

Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее
Всем добрый вечер, Есть ли возможность загрузить данные один раз с MYSQL...

Как создать layout, который запускается один раз, при первом запуске приложения?
Как создать layout, который запускается один раз, при первом запуске...


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

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

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