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

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

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

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

25.11.2012, 06:21. Просмотров 780. Ответов 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
Посмотрите здесь:

Как создать spinner внутри recycler view? - Программирование Android
необходимо реализовать выпадающий список внутри recycler view. может, кто сталкивался с подобным или есть идеи, как это можно сделать, буду...

Отрисовка спрайтов - Программирование Android
Что лучше, менять номер кадра на картинке или создавать новый спрайт? Ведь все равно придется рисовать новые спрайты для врага, для другого...

многослойная отрисовка - Программирование Android
Вопрос вот в чем: Хочу отрисовать изображение, возможно с какой-то динамикой и использовать его в качестве фона. Далее поверх него...

GridView и сложная отрисовка - Программирование Android
Вся сложность в том, что надо отрисовать как большие, так и маленькие прямоугольники. При этом, когда большие прямоугольники...

Отрисовка картинок по щелчу на кнопке - Программирование Android
Здравствуйте, форумчане. Столкнулся с незнанием среды разработки, впервые связываюсь с графикой. В моем приложении 2 вида картинок. Мне...

Отрисовка данных в отдельном потоке - Программирование Android
Уважаемые гуру и простые хорошие ребята, подскажите как правильно реализовать отрисовку графики в отдельном потоке? С потоками только...

Динамическое создание кнопок и их кривая отрисовка - Программирование Android
Всем доброго времени суток. Имеется такая процедура(хотя в данном случае правильнее функция). private void SetButtons() { ...

Программное добавление View - Программирование Android
Не могу разобраться: нужно программно прилепить н-ное количество вьюх. Делаю так: Dialog dialog = new Dialog(pd.getContext()); ...

Динамическое создание View - Программирование Android
Есть шаблон: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

OnDown OnUp на View - Программирование Android
Привет. Мне дали задание сделать событие при клике на кнопку и событие отпускания пальца с кнопки. OnClick элементарно, все...

Программное добавление View - Программирование Android
Всем привет! У меня в роли setContentView выступает класс Draw2D, в котором я собираюсь рисовать кое-какую графику. Графика рисуется...

Не отлавливается View.OnClickListener - Программирование Android
Написал следующий код, список появляется с элементами все работает. а вот на карточку внутри списка нажатие не хочет отрабатывать. еще...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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);
Ответ Создать тему
Опции темы

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