首先我们先新建一个MXML COMPONENT , 假设名字叫NavCircle.mxml
然后我们制作导航需要的图片,如下所示:
把这个图片放入项目中,并指定其click事件:
<mx:Image styleName="Btns" x="0" y="0" source="user.jpg" click="clickrect(event)"/>
好啦,界面基本完成,下面就是代码部分啦
看图,这是两个圆组成的一个环。然后8个方向把圆分成均等的8份。那么一份所占的角度就是360/8 = 22.5度
那么只要计算鼠标落在圆环上的角度,就可以算出我们实际导航的方位了,就这么简单
首先,实现click事件:
private function clickrect(event : MouseEvent) : void ...{
// 鼠标x坐标
var x : Number = event.stageX;
// 鼠标y坐标
var y : Number = event.stageY;
// 圆心坐标
var circlePoint : Point = new Point(60,532);
// 外圆半径
var br : int = 57;
// 内圆半径
var lr : int = 40;
// 判断方位
var ret : String = checkValidate(x,y,circlePoint,br,lr);
// 处理方位
if(ret!=null) ...{
Alert.show(ret);
}
}
这个很简单,只是取得鼠标坐标,然后丢给方位判断函数。
至于圆心坐标,可以在clickrect方法中用trace跟踪x和y,运行程序,然后在圆心处点击得到,嘿嘿。
当然,在现实中,这个也是从引用这个控件的Application提供这个数据,我比较懒,就在这里写死了。
然后,就是判断区域的函数啦,代码如下:
private function checkValidate(x: Number,y: Number,circlePoint : Point,br: Number,lr: Number) : String ...{
// 鼠标到y轴的距离
var x1 : Number = x-circlePoint.x;
// 鼠标到x轴的距离
var y1 : Number = y-circlePoint.y;
// 鼠标到圆心的距离
var r1 : Number = Math.sqrt(Math.pow(x1,2)+Math.pow(y1,2));
// 判断是否在环内
if(r1 >= lr && r1<= br) ...{
// 计算目前弧度
var hudu : Number = Math.asin(Math.abs(x1)/r1);
// 换算成角度
var degree : Number = hudu*180/Math.PI;
// 判断落在哪个角度上
if(degree>0 && degree<=22.5) ...{
// 判断方位
if(y1<0)
return "n";
else
return "s";
}
else if(degree>22.5 && degree <=45) ...{
if(y1<0)
return "nw";
else
return "sw";
}
else if(degree>45 && degree <=67.5) ...{
if(x1>0)
return "se";
else
return "sw";
}
else if(degree>67.5 && degree <=90) ...{
if(x1>0)
return "e";
else
return "w";
}
else return null;
}
else
return null;
}
参数,x , y 为当前鼠标位置;circlePoint 为圆心坐标;br为外圆半径,lr为内圆半径,这个在前面已经提到了。
首先,我们以圆心为原点,做坐标系,如图:
然后判断鼠标是否点在了圆环内,if(r1 >= lr && r1<= br)
再利用 弦长 l = 2* 半径r * sin(弧度x) 公式 来算出x,也就是要求的弧度,再把弧度转成角度。
由于使用了绝对值,所以所得角度只在0~90度之间。
我们在根据观察判断,北和南为-22.5度和22.5度之间,只是分别在y 轴的两侧
同理东和西在67.5度和90度之间,只是分别在x轴两侧,以此类推
于是就可以判断出8个方位了。
分享到:
相关推荐
FLEX控件
"Flex控件折叠效果"是一个常见的需求,它涉及到用户界面(UI)的动态性与可扩展性,使得用户能更有效地管理和浏览信息。本文将深入探讨Flex控件折叠效果的相关知识点,包括其工作原理、实现方式以及实际应用。 Flex...
在Flex编程中,创建自定义控件是一项常见的需求,尤其在处理时间选择这类特定功能时。标题"Flex 日期带时分秒自定义控件"指的是开发者为了满足项目需求,可能已经创建了一个能够显示并允许用户选择具体到时、分、秒...
在这个"flex多文件上传控件"中,我们可以看到它是Flex技术在文件上传场景中的应用,特别适合于需要批量或单个上传文件到服务器的Web应用。 该控件是通过Adobe Flash Builder 4进行开发的,Flash Builder是一个集成...
flex自带的日期控件是没有时间选择的,本控件集成了时间的选择,另外时间的选择实现了可手动输入,输入的值可以定位下拉列表框. 导入方便,引用方便,提供多种输出格式. 经过测试完全OK,并且该控件已经应用于我们公司的...
这个"自动调整大小文本框控件"是FLEX开发中的一个实用组件,它解决了在显示动态内容时,文本框尺寸需要随内容长度变化的问题。通过这样的组件,开发者可以创建更灵活、用户体验更佳的界面。 首先,我们来看...
本文将深入探讨“FLEX 年月日时分日期自定义控件”,这是一种专为FLEX平台设计的自定义组件,它允许用户以特定格式输入日期和时间。此控件以MXML(Markup XML)编码,这是一种用于构建Flex应用程序的声明性语言。 *...
在Flex开发中,分页控件是用于展示大量数据时必不可少的一个组件,它允许用户以较小的数据块(每页)浏览整个数据集,从而提高用户体验并减轻服务器负载。本篇文章将详细讲解如何在Flex中创建和使用分页控件。 首先...
在本示例中,"基于Flex开发的多文件上传控件"指的是使用Flex技术创建的能够一次性选择并上传多个文件的用户界面组件。这种控件通常具有拖放功能、进度条显示、文件类型过滤等特性,以提供用户友好的体验。 在.NET...
在Flex中,分页控件是常见的用户界面元素,特别是在处理大量数据时,它可以帮助用户逐页浏览内容,提高用户体验。本篇文章将详细介绍如何在Flex中创建自定义的分页控件及其相关知识点。 首先,我们要理解Flex的组件...
Flex时间控件是一种基于Adobe Flex框架的用户界面组件,它为用户提供了一种直观的方式来选择日期和时间。在Flex中,这种控件通常用于构建具有高度交互性和用户友好的Web应用程序。Flex是一个开源的开发框架,它允许...
在这个场景中,我们关注的是Flex实现的拖拽控件,这是一种交互式UI元素,允许用户通过鼠标操作移动元素,提供了丰富的用户体验。 拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类...
Flex控件事件是Adobe Flex应用程序开发中的核心概念,主要用于实现用户交互和组件间的通信。在Flex中,控件(或称为组件)是构建用户界面的基本元素,如按钮、文本框、列表等。当用户与这些控件进行交互时,如点击...
Flex上传控件是一种基于Adobe Flex技术的用户界面组件,它允许用户在Web应用程序中上传文件。Flex是一个开源的开发框架,主要用于构建富互联网应用程序(RIA),它可以创建动态、交互式的Web应用,支持丰富的图形和...
Flex带时间的日期控件就是为了解决这一需求而设计的,它允许用户同时选择日期和时间,提供了一种直观且用户友好的交互方式。在本文中,我们将深入探讨Flex中实现这种功能的关键知识点。 首先,我们要理解Flex的基本...
Flex是Adobe公司推出的一种基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。这种技术允许开发者创建具有高度交互性和动态视觉效果的Web应用,提供比传统...
在本文中,我们将深入探讨如何使用Adobe Flex技术来创建手绘的百分比圆盘,并实现三色渐变的动态效果。Flex是一种强大的开发框架,它允许开发者构建富互联网应用程序(RIA),并支持丰富的用户界面设计。我们将从...
本文将深入探讨Flex中更换主题和皮肤控件的相关知识点。 首先,我们要理解什么是Flex中的主题(Theme)。主题是定义一组统一的视觉样式和布局规则的集合,包括颜色、字体、边框、阴影等元素。通过主题,开发者可以...
在Flex中,视图切换和自定义控件是构建用户界面时的重要技术,它们极大地增强了用户体验和交互性。 视图切换是Flex应用程序中常见的功能,允许用户在多个界面或工作区之间进行导航。这在多页面或模块化的应用中非常...