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

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

25.11.2012, 06:21. Просмотров 845. Ответов 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
Здравствуйте! Имеется свой компонент, наследуемый от View. В нём (на его canvas, на всю)...

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

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

Public void onClick(View view)
Не работает public void onClick(View view) :wall: public class MainActivity extends...

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

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

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

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

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


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

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

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