用Canvas制作一个简单的操作菜单

这篇博客介绍了如何在J2ME中使用Canvas而非List来创建一个更具吸引力的操作菜单。通过自定义的ListCanvas类,作者展示了如何绘制菜单项并实现焦点跟踪,以及通过键盘事件处理上下选择和菜单响应。
摘要由CSDN通过智能技术生成

无论是应用程序还是游戏,有一个漂亮的操作菜单能为你的作品增加魅力。最近在学习J2ME的时候发现J2ME中用List做出来的菜单不是很满意,呵呵! 想到Canvas/*
 * ListCanvasMidlet.java
 *
 * Created on 2006年4月27日, 下午8:34
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 *
 * @author  jack
 * @version
 */
public class ListCanvasMidlet extends MIDlet implements CommandListener {
    private static ListCanvasMidlet instance;
    private Display display;
    private  ListCanvas listCanvas;
    public ListCanvasMidlet ()
    {
        instance=this;
        display=Display.getDisplay(this);
        listCanvas=new ListCanvas();
        listCanvas.setCommandListener(this);
            // Add the Exit command
           listCanvas.addCommand(new Command("Exit", Command.EXIT, 1));
           listCanvas.addCommand(new Command("OK", Command.OK

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canvas 是 HTML5 中的一个标签,用于在网页上绘制图形,包括复杂的形状如弧形。弧形菜单(Circular Menu)是一种常见的UI设计,它通常用于导航,展示成环形或半圆形的布局,其中每个选项作为一个弧形部分。 创建 Canvas 上的弧形菜单主要涉及以下几个步骤: 1. **HTML 结构**:设置一个 `canvas` 元素作为容器,并可能包含一些按钮或者其他交互元素。 ```html <canvas id="arcMenu" width="400" height="400"></canvas> ``` 2. **JavaScript 代码**:使用 JavaScript 和 Canvas API 来绘制弧形和添加交互逻辑。 ```javascript const canvas = document.getElementById('arcMenu'); const ctx = canvas.getContext('2d'); // 设置路径数据 const center = { x: canvas.width / 2, y: canvas.height / 2 }; const radius = canvas.width / 2; const sectors = [ { startAngle: 0, endAngle: Math.PI * 0.75, text: 'Option 1' }, { startAngle: Math.PI * 0.75, endAngle: Math.PI, text: 'Option 2' }, // 更多选项... ]; // 绘制弧形 sectors.forEach(sect => { ctx.beginPath(); ctx.arc(center.x, center.y, radius, sect.startAngle, sect.endAngle); ctx.fillStyle = '#008080'; // 颜色选择 ctx.fill(); ctx.save(); ctx.translate(center.x, center.y); // 移动到中心 ctx.rotate(sect.startAngle); // 旋转到起始角度 ctx.fillText(sect.text, -ctx.measureText(sect.text).width / 2, 15); // 文本位置 ctx.restore(); }); ``` 3. **交互处理**:可以通过鼠标事件监听器来响应用户点击,切换或获取当前选中的弧形区域。 ```javascript canvas.addEventListener('click', e => { const rect = canvas.getBoundingClientRect(); const angle = Math.atan2(e.clientY - rect.top, e.clientX - rect.left) - Math.PI / 2; const closestSector = sectors.find(sect => { return sector.startAngle <= angle && angle < sector.endAngle; }); // 处理点击事件 console.log('Clicked on:', closestSector.text); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值