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

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

Войти
Регистрация
Восстановить пароль
 
keryax
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
#1

Отрисовка битмапа внутри View - Android

25.11.2012, 06:21. Просмотров 770. Ответов 2
Метки нет (Все метки)

Доброго времени суток, уважаемые программисты. Пытаюсь создать свой View для вывода графики. Создал некоторый битмап, который использую в качестве буфера.
Проблема в том, что почему-то изображение не увеличивается и не перемещается внутри OnDraw
Java
1
2
3
            
CanvBuffer.scale(Scale, Scale);
CanvBuffer.translate(ScrollX, ScrollY);
Вот более подробный код:
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
public final class MyView extends View {
    private Bitmap Buffer;
    private Canvas CanvBuffer;
    
    private float ScrollX;
    private float ScrollY;
    private float Scale;
    public MyView(Context context, AttributeSet attrs) { //конструктор
        super(context, attrs);
        
        ScrollX = 0;
        ScrollY = 0;
        Scale = 1;
    }
    private void ClearBuffer(){
        if(Buffer!=null) Buffer.recycle();
        if(getWidth()==0) return;
        Buffer = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        CanvBuffer = new Canvas(Buffer);
        CanvBuffer.drawCircle(100, 200, 50, new Paint());
        
    }
    @Override
    public boolean onTouchEvent(MotionEvent event){
        ScrollX=100;
        Scale = 10;
        invalidate();
        return true;
    }
    @Override
    protected void onSizeChanged(int newx, int newy, int oldx, int oldy){ 
        super.onSizeChanged(newx, newy, oldx, oldy);
        
        ClearBuffer();
        invalidate();
    }
    @Override
    protected void onDraw(Canvas canvas){
        canvas.drawText("test "+ScrollX, 5, getHeight()-50, new Paint()); 
//после нажатия на дисплей значение ScrollX изменяется, но увеличения и перемещения не происходит
        if(Buffer!=null){ 
            CanvBuffer.scale(Scale, Scale);
            CanvBuffer.translate(ScrollX, ScrollY);
            canvas.drawBitmap(Buffer, 0, 0, new Paint());
        }
    }
}
Я ожидаю что при нажатии на дисплей чёрный кружочек переместится и увеличится, но этого не происходит.
Подскажите, пожалуйста, что я делаю не так. Гугл уже второй день не может мне помочь.

p.s. да я в курсе что new Paint() внутри onDraw и не только - нехорошо. это временно.
p.p.s. Android 2.2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 06:21     Отрисовка битмапа внутри View
Посмотрите здесь:

Android многослойная отрисовка
Отрисовка спрайтов Android
Android Динамическое создание кнопок и их кривая отрисовка
GridView и сложная отрисовка Android
Android XML vs View
Отрисовка View Android
Движение View Android
Android Отрисовка картинок по щелчу на кнопке
View во фрагментах Android
Как создать spinner внутри recycler view? Android
Отрисовка данных в отдельном потоке Android
Android Красивые View

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
26.11.2012, 15:18     Отрисовка битмапа внутри View #2
может потому что Buffer == null?
keryax
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
26.11.2012, 18:11  [ТС]     Отрисовка битмапа внутри View #3
Нет. Не null, но решение я нашёл. Заменил
Java
1
2
3
CanvBuffer.scale(Scale, Scale);
CanvBuffer.translate(ScrollX, ScrollY);
canvas.drawBitmap(Buffer, 0, 0, new Paint());
на

Java
1
2
3
4
Matrix matrix = new Matrix();
matrix.preScale(Scale, Scale, mid.x, mid.y);
matrix.postTranslate(ScrollX, ScrollY);
canvas.drawBitmap(Buffer, matrix, this.BufferPaint);
Yandex
Объявления
26.11.2012, 18:11     Отрисовка битмапа внутри View
Ответ Создать тему
Опции темы

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