怎樣在手機中顯示二行二列的圖片,并在每張圖片前加一下單選按鈕?
如:有圖片1,2,3,4
想在界面上顯示效果如下。
o1 o2
o3 o4
其中的o是單選按鈕。
謝謝!
或者是顯示二行二列的四張圖片,選擇其中一個圖片后在那個圖片中顯示“選擇”這二個字。
[解决办法]
用低级界面
[解决办法]
思想是用canvas画出四张图片,包括每张图片前面的未选中的图片o,设置初始焦点位置为第一张图片,如果有图片被选中,把选中图片@覆盖在未选中图片上,并且计算图片后面位置g.drawString() "选择 "。
在paint(Graphics g)方法里画图片,并且确定焦点,定义location,place,当location==place时即为获得焦点
移动焦点调用如下:public void keyPressed(int keycode){
switch(getGameAction(keycode)){
case Canvas.DOWN:
location--;
place--;
}
}
[解决办法]
使用Canvas自己画,然后使用Canvas类中keyPressed函数处理用户的按键事件。
[解决办法]
还不如这样,画一个像鼠标一样的东东,然后用setClip 分别画1,2,3,4
当按键时,更新鼠标坐标,使其指向需要选定的图片...当图片被指向时,再在图片背后画一层框醒目提示..不是要 "性感 "得多吗^_^
[解决办法]
完全达到这种需求和布局得用低级界面自己画了.
既然是低级界面,自然没有单选框这种控件可用.
所以得自己画单选框的样子,自己控制单选框的行为.细节还是挺多的.
[解决办法]
cxc014(有心插柳柳不活,无心栽花花开花?)
还不如这样,画一个像鼠标一样的东东,然后用setClip 分别画1,2,3,4
当按键时,更新鼠标坐标,使其指向需要选定的图片...当图片被指向时,再在图片背后画一层框醒目提示..不是要 "性感 "得多吗^_^
-----------------------------------------------
哈哈,是挺性感的啊.我按照你的做了个demo.你看看是这种效果嘛?
//MainMidlet.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MainMidlet extends MIDlet {
private static MainMidlet instance;
private Displayable nowScreen;
private Display display;
public MainMidlet() {
instance = this;
nowScreen = new CanvasTest();
}
public void startApp() {
display = Display.getDisplay(this);
display.setCurrent(nowScreen);
}
public void pauseApp() {
nowScreen = display.getCurrent();
}
public void destroyApp(boolean unconditional) {
}
public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
------------------------------------------------
//CanvasTest.java
import javax.microedition.lcdui.*;
public class CanvasTest extends Canvas implements CommandListener {
private Image screen;
private Graphics bufferG;
private int borderX = 5;
private int borderY = 5;
private int mouseX = 15;
private int mouseY = 15;
public CanvasTest() {
screen = Image.createImage(getWidth(),getHeight());
addCommand(new Command( "退出 ", Command.EXIT, 1));
setCommandListener(this);
}
public void commandAction(Command _command, Displayable _displayable) {
if (_command.getCommandType() == Command.EXIT) {
MainMidlet.quitApp();
}
}
protected void paint(Graphics g) {
//缓冲清屏
bufferG = screen.getGraphics();
bufferG.setColor(0x00FFFF00);
bufferG.fillRect(0, 0, getWidth(), getHeight());
//画四个图片
bufferG.setColor(0x000000FF);
bufferG.fillRect(10, 10, 40, 30);
bufferG.fillRect(60, 10, 40, 30);
bufferG.fillRect(10, 50, 40, 30);
bufferG.fillRect(60, 50, 40, 30);
//画假鼠标
bufferG.setColor(0x0000FF00);
bufferG.fillTriangle(mouseX, mouseY, mouseX, mouseY+10, mouseX+5, mouseY+8);
//画选中框
if((mouseX > = borderX) &&(mouseX <= borderX+50) && (mouseY > = borderY) &&(mouseY <= borderY+40)) {
bufferG.setColor(0x00FF0000);
bufferG.drawRect(borderX, borderY, 50, 40);
} else if((mouseX > 5) &&(mouseX < 105) && (mouseY > 5) && (mouseY < 85)) {
if(mouseX < borderX) {
borderX -= 50;
} else if(mouseX > borderX+50) {
borderX += 50;
} else if(mouseY < borderY) {
borderY -= 40;
} else if(mouseY > borderY+40) {
borderY += 40;
}
}
//从缓冲写屏
g.drawImage(screen, 0, 0, Graphics.TOP|Graphics.LEFT);
bufferG.setClip(0, 0, getWidth(), getHeight());
}
protected void keyPressed(int keyCode) {
if(getGameAction(keyCode) == Canvas.FIRE) {
} else if(getGameAction(keyCode) == Canvas.UP) {
mouseY -= 5;
} else if(getGameAction(keyCode) == Canvas.DOWN) {
mouseY += 5;
} else if(getGameAction(keyCode) == Canvas.LEFT) {
mouseX -= 5;
} else if(getGameAction(keyCode) == Canvas.RIGHT) {
mouseX += 5;
}
repaint();
}
}
[解决办法]
楼上的辛苦了,不错,其实我们还要再改进一点(:
把 画选中框 提前到画图片以前,这样可以在图片和框之间再填冲一层淡的阴影效果或是发光效果..
BTW:keyPressed中没对临界处理..如果一直狂按Canvas.UP就麻烦了,至于选中框完全可以根据mouse的坐标就可以确定...不需要再增加变量..复杂化..
------一点小建议^_^
[解决办法]
要想按住不放手,达到平滑移动效果好像需要GameCanvas.
建立个线程,再用getKeyStates()方法捕获按键处理就可以了.
哈哈哈,可以狂按.
[解决办法]
不知道除了用GameCanvas,Canvas能实现不?
[解决办法]
GameCanval也是基于Canvas写的,肯定是可以实现的...一般通过置位来实现:
按下时标志位置1,Release时清0..在paint中,如果标志位为1,每帧更新坐标,为0则不更新