Клуб мобильного творчества
*
Автор: Плетт Олег [Zereb] 2о1о год
Сегодня мы попытаемся нарисовать на канве,менюшку =).
Что нам для этого
нужно?
Для начала обЪявим строковый массив со всеми пунктами:
...
public String[] menu={"Пункт1","Пункт2","Последний пункт"};
...
Далее позиции по х и у наших пунктов ,a такд жe ширина и высота 'прямоугольника выделителя':
...
public int xPos,yPos;
public int wPunkt,hPunkt;
...
А еще нам понадопится расстояние между пунктами,и текущее состояние пункта выделителя и булевая переменная.
...
public int sm;
public int jetsz;
public boolean ein;
...
Далее в конструкторе класса инициализируем некоторые переменные:
...
public myCanvas(){
setFullScreenMode(true);
int w=getWidth();
int h=getHeight();
sm=h/8;
xPos=w/2;
yPos=h/8;
jetsz=0;
еin=true;
}
*
Далее в начале метода паинт установим ширифт, высоту и ширину выделителя, воспользуемся нашей булевой переменной чтобы при каждом репаинте не переустанавливать заного шрифт и т.д.:
...
public void paint(Graphics g){
if(ein){
Font font=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_SMALL);
g.setFont(font);
wMenu=font.stringWidth(mString[0])+4;
hMenu=font.getHeight()+4;
ein=!ein}
...
Далее установим цвет фона например чёрный и зальём весь экран прямоугольником, а также прорисуем надписи над софтами:
...
g.setColor(0);
g.fillRect(0,0,w,h);
g.setColor(0,0,255);
g.drawString("Надпись 2",w-2,getHeight()-2,Graphics.RIGHTIGraphics.BASELINE);
g.drawString("Надпись 1",2,getHeight()-2,Graphics.LEFTIGraphics.BASELINE);
...
Теперь собствено и приступим к прорисовке пунктов и выделителя.
Сначало надо нарисовать выделитель.
Установим цвет например ядовито-зеленый =), и нарисуем выделитель пользуясь нашими переменными:
...
g.setColor(0,200, 0);
g.drawRect(xPos, yPos +
sm * jetsz,
wPunkt,
hPunkt);
*
Далее нарисуем с помощью цикла fоr наши пункты.
Установим цвет, например синий:
...
g.setColor(0,0,255);
for(int i=0; i<mString.length; i++){
g.drawString(punkt
, xPos, yPos +
sm * i, Graphics.TOPIGraphics.HCENTER);
}
...
Уря! Основная работа сделана!
Осталось только закрыть наш паинт.И обработать клавиши. И еще, не следует в конце метода паинт ну или где нибудь еще в этом методе ставить репаинт. Дабы не нагружать проц телефона.
...
Остался вопрос: Какже передвигать наш выделитель?!
Для этого нам нужно всего лишь уменьшать или увеличивать переменную текущего положения выделитель и при этом проверять не достиг ли выделитель самого верхнего и нижнего пункта.
...
protected void
keyPressed(int
KeyCode) {
switch(KeyCode){

case -60:
case 56:
if(index <
punkt.length - 1) jetsz++; repaint(); break;

case -59:
case 50:
if(index > 0) jetsz--; repaint(); break;
...
Тепер вам осталось только проверять какое текущее выделителя и совершать определеные действия нажатии выбора.
Например:
...
case 53:
if(jetsz==1){чтонить сделать}
...
Вот и все! Меню готово.
*
а зачем это сюда перенесено?
*
Из библиотеки раздел убираю, библиотека будет только для Творчества письменного :)
Да и движухи больше на форуме, может будут чаще опытом делится
Изменил(а) seg0ro 12.05.11 в 12:45