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

Добавление элемента - наследника View - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Может ли быть два виджета в одном проекте где у каждого будет своя активити настроек? http://www.cyberforum.ru/android-dev/thread695443.html
Попытался так сделать, все везде написал и в provider и в manifest, но все равно при добавлении второго виджета вылетает активити первого виджета :( Может так нельзя делать? Спасибо
Android Подключение к MySQL на Android Доброе утро! Подскажите пожалуйста способы коннекта к MySQL в разработке приложений на android. Покопался по форумам, гуглу, нашёл некоторые методы, но не знаю как и какой всё таки правильно или лучше. Вот и прошу помощи у Вас. Любым подсказкам буду рад. http://www.cyberforum.ru/android-dev/thread695269.html
Как обработать нажатие ImageView Android
Создаю программу на Андроиде. И сразу столкнулся с проблемой. Почему то не получается... Создаю три объекта ImageView, и надо при нажатии на одну из картинок, чтобы она заменялась новой. Как это реализовать? Может кто подскажет? Добавлено через 1 час 4 минуты И вобще, такой код правильный? ImageView img = (ImageView) findViewById(R.id.imageView1); img.setOnClickListener(new...
Android Добавление "балуна" в Yandex Map Kit
Здравствуйте. Пытаюсь используя сэмплы Yandex Map Kit сделать добавление балуна по нажатию кнопки. Необходимо чтоб балун появлялся именно на текущей позиции GPS, а затем уже передвигать его куда нужно. Код таков: public class MainActivity extends Activity implements OnMyLocationListener{ MyLocationItem myLocationItem; MapController mMapController; LinearLayout mView; ...
Android Ищу напарника http://www.cyberforum.ru/android-dev/thread693975.html
Здравствуйте, ищу напарника для написания простых приложений(пока что) под андроид на тему развлечений/программы для быта. пишу на java.Будем выкладывать в google play и зарабатывать) пишите в скайп: fiphiker
Android Как открыть проект на Eclips Добрый день. Подскажите пожалуйста как открыть проект на Eclips. У меня есть проект из учебника но что-то не получается его открыть. подробнее

Показать сообщение отдельно
niklep
2 / 2 / 1
Регистрация: 10.03.2010
Сообщений: 44

Добавление элемента - наследника View - Android

12.11.2012, 20:12. Просмотров 1770. Ответов 10
Метки (Все метки)

Здравствуйте. Пишу для Android простенькую игрушку. Для нее мне понадобилось написать класс, рисующий круг - наследник View. На экране одновременно должно быть множество кругов. Но у меня проблема в том, что отображается на экране только тот круг, который я последним добавил, а предыдущие исчезают. Подскажите, где я ошибся?
Моя основная Активити:
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
80
81
82
83
84
85
86
public class GameActivity extends Activity {
 
    ...
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        
        // Узнаю размеры экрана.        
        getDisplayParams();
        
        ...
 
        // все объекты добавляю на RelativeLayout
        relLayout = (RelativeLayout)findViewById(R.id.relLayout);
        lpView = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        // grid - это тоже наследник View, но простой. Он просто рисует сетку и высчитывает ее размеры, размеры каждой учейки и т.п.
        grid = new Grid(getApplicationContext(), screenWidth);
        relLayout.addView(grid);
        
        // Старт игры. См. ниже
        startNewGame();
    }
 
    ...
    
    private void initCircleArrays() {
                
        // проходит инициализация служебных массивов и структур
 
    }
    
    @SuppressWarnings("deprecation")
    @TargetApi(13)
    private void getDisplayParams() {
 
        ...
 
    }
    
    // Добавление одного шарика на поле. Параметрами передаю позицию шара на поле 9x9 и его цвет
    private void addSingleCircle(int posCircleX, int posCircleY, int colorCircle) {
 
        ...
 
        // Передаю кругу информацию о его цвете
        circleArr[posCircleY-1][posCircleX-1].customColor(colorCircle);
        // Передаю кругу его позицию на поле
        circleArr[posCircleY-1][posCircleX-1].setPosition(posCircleX, posCircleY);
 
        // считаю margin слева и сверху для круга
        // getCellWidth() -  получение ширины каждой ячейки поля, getGridOffset() - смещение сетки относительно края и верха экрана (ширина сетки меньше ширины экрана, и сетка выровнена по центру. Соответственно появляется отступ. Сверху отступ такой же, как и по бокам. А вообще, смотри приложенный скриншот...)
        // posCircleX и posCircleY добавляю, чтобы в отступе учесть суммарную толщину однопиксельных линий - разделителей ячеек.
        lpView.leftMargin=(int)((posCircleX-1)*getCellWidth()+getGridOffset()+posCircleX);
        lpView.topMargin=(int)((posCircleY-1)*getCellWidth()+getGridOffset()+posCircleY);
        
        relLayout.addView(circleArr[posCircleY-1][posCircleX-1],lpView);
    }
    
    // Добавляю по 3 шара на поле в рандомные свободные ячейки.
    private void addTripleRandomCircle() {
        
        ...
        
    }
        
    ...
    
    private void startNewGame() {
        initCircleArrays();
        //addTripleRandomCircle();
        addSingleCircle(1, 1, Color.BLACK);
        addSingleCircle(2, 2, Color.BLACK);
    }
    
    public float getGridOffset() {
        return grid.getBitmapLeftAndTopPos();
    }
    
    public float getCellWidth() {
        return grid.getCellWidth();
    }
    
    ...
}
И собственно класс CircleView, рисующий круг
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
public class CircleView extends View {
 
    ...
    
    public CircleView(GameActivity context) {
        super(context);
        this.context=context;
        init();
    }
 
    public CircleView(GameActivity context, AttributeSet attrs) {
        super(context, attrs);
        this.context=context;
        init();
    }
    
private void init() {
        // получаем смещение сетки
    gridOffset=context.getGridOffset();
 
        // получаем ширину ячейки
    cellWidth=context.getCellWidth();   
    
        // устанавливаем кисть
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        
                // размер нашей view'шки - ширина ячейки
        setMeasuredDimension((int)cellWidth, (int)cellWidth);
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // рисуем круг
        canvas.drawCircle(cellWidth/2, cellWidth/2, radius, paint);
    }
    
    public void setColor(int circleColor) {
        paint.setColor(circleColor);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
             
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            Log.d(TAG,"Position Of this circle: " + String.valueOf(this.posX) + " and " + String.valueOf(this.posY));
        }
        return true;
    }
    
    ...
 
    // оповещение шара о его местоположении на поле
    public void setPosition(int posX, int posY) {
        this.posX=posX;
        this.posY=posY;
    }
Сейчас в методе startNewGame() указано нарисовать круги в ячейках (1,1) и (2,2) (отсчет с единицы).
Но рисуется только второй. И так, какие бы координаты я не указал, рисуется всегда тот, который рисуется последним.
Миниатюры
Добавление элемента - наследника View  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru