浏览 4587 次
锁定老帖子 主题:J2ME UI之窗口部件选择条
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-16
package org.wuhua.ui; import javax.microedition.lcdui.Graphics; /** * <b>类名:Select.java</b> </br> * 编写日期: 2006-8-15 <br/> * 程序功能描述:选择条的抽象类.具体子类将实现,可渐变的效果<br/> * Demo: <br/> * Bug: <br/> * * 程序变更日期 :<br/> * 变更作者 :<br/> * 变更说明 :<br/> * * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> */ public abstract class Select { /* * 默认选择框是没边框的 */ protected boolean isBorder = false; /* */ protected int selectColor = 0x676767; /** * 绘制边框 * * @param x 起始水平线x * @param y 起始垂直线y * @param width 边框的宽度 * @param height 边框的高度 * @param g 绘制此边框的图形 */ public abstract void paint( int x, int y, int width, int height, Graphics g ); } package org.wuhua.ui.select; import javax.microedition.lcdui.Graphics; import org.wuhua.ui.Border; import org.wuhua.ui.Select; import org.wuhua.ui.border.RoundRectBorder; /** * <b>类名:Shade.java</b> </br> * 编写日期: 2006-8-15 <br/> * 程序功能描述:带有渐变效果的选择框,这些选择框将用在List跟其他的窗口部件上.<br/> * 以后我们设计的时候,就可以重用这个部件,而不毕业自己写啊写.好麻烦的 * Demo: <br/> * Bug: <br/> * * 程序变更日期 :<br/> * 变更作者 :<br/> * 变更说明 :<br/> * * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> */ public class ShadeSelect extends Select { private Border border; public ShadeSelect(int _selectColor, boolean _isBorder){ //默认的边框 this(_selectColor,_isBorder,_isBorder?Border.getRectBorder():null); } public ShadeSelect(int _selectColor, boolean _isBorder,Border _border){ if(_isBorder && _border == null) throw new IllegalArgumentException("BoderWidth isn't less than 0 "); selectColor = _selectColor; isBorder = _isBorder; border = _border; } public void paint(int x, int y, int width, int height, Graphics g) { // init(width); if(isBorder){ paintBorder(x,y,width,height,g); x = x + border.getBorderWidth(); y = y + border.getBorderWidth(); width = width - 2*border.getBorderWidth(); height = height-2*border.getBorderWidth(); //判断边框的类型,再具体画出选择框 if(border instanceof RoundRectBorder){ paintShadeSelectRac(x,y,width,height,g); }else{ paintShadeSelect(x,y,width,height,g); } }else{ paintShadeSelect(x,y,width,height,g); } } private void paintBorder(int x, int y, int width, int height, Graphics g){ border.paint(x,y,width,height,g); } /* * 渐变的算法是,获取整个框架的高度,然后再描绘没个点,只是这个点的颜色变浅 */ private void paintShadeSelect(int x, int y, int width, int height, Graphics g){ //通过画线来画出颜色渐变的效果 for(int i = 0; i<= width; i++){ g.setColor(selectColor + i/2); g.drawLine(x + i,y,x + i,height+y); } } /* * 渐变的算法是,获取整个框架的高度,然后再描绘没个点,只是这个点的颜色变浅 */ private void paintShadeSelectRac(int x, int y, int width, int height, Graphics g){ //循环画出线条,可以看到渐变的效果,其中6表示圆弧大小,采用固定形式,这点是不是需要变通下.以后研究 for(int i = 1; i<= width/2; i++){ g.setColor(selectColor + i/2); g.drawRoundRect(x + i,y,width-i,height,6,6); g.drawRoundRect(x +width- i,y, i,height,6,6); } g.setColor(selectColor); g.drawRoundRect(x ,y,width/2,height,6,6); g.drawRoundRect(width/2+x,y, width/2,height,6,6); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |