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

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

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

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

25.11.2012, 06:21. Просмотров 801. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 06:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отрисовка битмапа внутри View (Программирование Android):

Отрисовка View - Программирование Android
Здравствуйте! Имеется свой компонент, наследуемый от View. В нём (на его canvas, на всю) требуется отрисовать другой View, как это...

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

В чем разница (View view) и (View v) - Программирование Android
Я только начинаю изучать программирование под андроид (до этого вобще программированием не занимался), по гуглу удалось найти только...

View вытесняет другое view из activity - Программирование Android
После второго EditText должна располагаться кнопка. Но почему-то этот второй EditText выпихивает ее из activity. Что не так?

Public void onClick(View view) - Программирование Android
Не работает public void onClick(View view) :wall: public class MainActivity extends AppCompatActivity implements View.OnClickListener...

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

2
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
26.11.2012, 15:18 #2
может потому что Buffer == null?
0
keryax
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
26.11.2012, 18:11  [ТС] #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);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 18:11
Привет! Вот еще темы с ответами:

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

Ng-view внутри ng-view - AngularJS
Добрый день. А можно внутри одной ng-view сделать еще одну ng-view? Т.е. основной документ куда вставляется шаблон: <html> <body> ...

Как во view добавить вычисляемую колонку с порядковым номером записи во view? - SQL Server
Как во view добавить вычисляемую колонку с порядковым номером записи во view?

По нажатию кнопки на View Controllere открыть Table View Controller - Программирование iOS
Как по нажатию кнопки на View Controllere открыть Table View Controller


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

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

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