Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
electricpunch
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 2
1

Использование изображений в "Живых обоях" (Live Wallpaper)

13.07.2012, 02:09. Просмотров 854. Ответов 0
Метки нет (Все метки)

Всем привет. Я начал изучать написание живых обоев для Android и столкнулся с проблемой. Моя цель: сделать обои с картинкой, которая вращается вокруг оси Z. У меня получилось вывести картинку с помощью экземпляра класса Bitmap, но в этом классе нет методов вроде rotationZ, rotationX, т.е. картинка может вращаться только в плоскости. Мне бы хотелось узнать - как можно использовать объект ImageView в классе WallpaperService (все мои попытки были неудачны). Вот код:
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
public class DemoWallpaperService extends WallpaperService {
 
    @Override
    public Engine onCreateEngine() {
        return new DemoWallpaperEngine();
    }
    private class DemoWallpaperEngine extends Engine {
                //вместо строчки, написанной ниже пытался использовать ImageView - не получилось
        Bitmap pic = BitmapFactory.decodeResource(getResources(), R.drawable.image);
        private boolean mVisible = false;
        private final Handler mHandler = new Handler();
        private final Runnable mUpdateDisplay = new Runnable() {
            public void run() {
                draw();
            }
        };
 
        @Override
        public void onVisibilityChanged(boolean visible) {
            mVisible = visible;
            if (visible) {
                draw();
            } else {
                mHandler.removeCallbacks(mUpdateDisplay);
            }
        }
 
        @Override
        public void onSurfaceChanged(SurfaceHolder holder, int format,
                int width, int height) {
            draw();
        }
 
        @Override
        public void onSurfaceDestroyed(SurfaceHolder holder) {
            super.onSurfaceDestroyed(holder);
            mVisible = false;
            mHandler.removeCallbacks(mUpdateDisplay);
        }
 
        @Override
        public void onDestroy() {
            super.onDestroy();
            mVisible = false;
            mHandler.removeCallbacks(mUpdateDisplay);
        }
 
        int rotation = 0;
        LWActivity a = new LWActivity();
        
        private void draw() {
            SurfaceHolder holder = getSurfaceHolder();
            Canvas c = null;
            try {
                c = holder.lockCanvas();
                if (c != null) {
                    Paint p = new Paint();
                    p.setAntiAlias(true);
                    rotation += 1;
                    if (rotation > 360) {
                        rotation = 1;
                    }
                                        //написанное ниже хочется сделать через ImageView, а не Bitmap
                                        c.drawBitmap(pic, matrix, p);         
                                        c.rotate(rotation, c.getWidth()/2, c.getHeight()/2); 
                                        c.drawBitmap(pic, c.getWidth()/2, c.getHeight()/2, p);
                }
            } finally {
                if (c != null)
                    holder.unlockCanvasAndPost(c);
            }
            mHandler.removeCallbacks(mUpdateDisplay);
            if (mVisible) {
                mHandler.postDelayed(mUpdateDisplay, 10);
            }
 
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 02:09
Ответы с готовыми решениями:

Анимация в живых обоях
Всем привет, у меня тут проблема, делаю живые обои с покадровой анимацией все...

Как сделать волны на живых обоях?
Имеется фон с морем, как сделать волны на этом море?

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры"
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Unknown method 'e' of 'org.apache.commons.logging.Log' package...

EditText, кнопки вместо клавиатуры, использование курсора, вызов клавиатуры "вручную"
Ну, в общем, я постарался написать наиболее подходящее название темы....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 02:09

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на...

Выбор платформы разработки "1С Мобильная платформа" или "Android Studio"
Всем, здравствуйте! Есть задача по разработке клиента для терминала сбора...

При эмулировании вместо надписи "Hello world" отображается "android"
Привет форумчане! Я только-только начинал программировать на андроиде. Поставил...


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

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

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