Flex中定制带图标的Tooltip

news/2024/5/19 20:27:24 标签: flex, function, 图形, image, network, class
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views"> “定制”无疑是TWaver中最大的一特色,无论是node,link,attachment,就连tooltip也同样可以定制,“定制”可以显示出更强更复杂的一些功能,今天给大家带来了一个定制Tooltip的例子。
啥也不多说,先看看效果:


下面我们来细细分析一下这个功能的实现。tooltip的特点是当鼠标滑过时显示,滑出时不显示。因此我们可以定义一个tooltip组件,监听class="tags" href="/tags/NETWORK.html" title=network>network的mouse move事件,如果鼠标下有网元,就显示tooltip组件并动态计算tooltip的位置,没有就隐藏tooltip组件。

class="language-javascript">this.class="tags" href="/tags/NETWORK.html" title=network>network.addEventListener(MouseEvent.MOUSE_MOVE, class="tags" href="/tags/FUNCTION.html" title=function>function(e:MouseEvent):void
updateToolTip(e);
});

private class="tags" href="/tags/FUNCTION.html" title=function>function updateToolTip(e:MouseEvent):void {
	var element:IElement = class="tags" href="/tags/NETWORK.html" title=network>network.getElementByMouseEvent(e, true, 5);
	if(lastElement == element){
		return;
	}
	lastElement = element;
	if(element is Link){
		var point:Point = class="tags" href="/tags/NETWORK.html" title=network>network.getLogicalPoint(e);
		customTooltip.x = point.x - customTooltip.measuredWidth / 2;
		customTooltip.y = point.y - customTooltip.measuredHeight - 10;
		customTooltip.setText(element.getClient('message'));
		customTooltip.visible = true;
	}else{
		customTooltip.visible = false;
	}
}

我们来详细了解一下如何来实现tooltip组件,首先定义一个tooltip类,继承于canvas。这样就可以将tooltip直接加到class="tags" href="/tags/NETWORK.html" title=network>network.topCanvas上。

class="language-javascript">public class CustomToolTip extends Canvas {}
tooltip组件上不需要交互动作和滚动条,因此可以将这些屏蔽:

class="language-javascript">public class="tags" href="/tags/FUNCTION.html" title=function>function CustomToolTip() {
	this.mouseEnabled = false;
	this.mouseChildren = false;
	this.horizontalScrollPolicy = ScrollPolicy.OFF;
	this.verticalScrollPolicy = ScrollPolicy.OFF;
	this.init();
}
重点是tooltip的绘制问题,我们需要将图标和文字加到tooltip组件上,并且在添加图标和文字时,需要计算一下位置

class="language-html">var messageImage:Image = new Image();
messageImage.source =  new messageIcon();
messageImage.x = _hmargin;
messageImage.y = _vmargin;
this.addChild(messageImage);

_message = new Label();
_message.x = _hmargin + _iconWidth + _hgap;
_message.y = _vmargin;
this.addChild(_message);
然后我们需要绘制一个如tooltip形状的class="tags" href="/tags/TuXing.html" title=图形>图形。先来分析一个,tooltip就是一个矩形框,为了好看一点可以搞个圆角矩形,矩形下方有一个小三角的class="tags" href="/tags/TuXing.html" title=图形>图形。接下来就可以通过画笔将这些class="tags" href="/tags/TuXing.html" title=图形>图形绘制出来

class="language-javascript">//获取画笔
var g:Graphics = this.graphics;
//设置画笔的线宽为1
var lineWidth:Number = 1;
//设置画笔的样式
g.lineStyle(lineWidth, 0, 0.5, true, "normal", CapsStyle.ROUND, JointStyle.ROUND);
//设置填充色
Utils.beginFill(g, 0xFFFFFF, 1, 0, 0, _width, _height, Consts.GRADIENT_LINEAR_EAST, 0xCCCCCC, 1);
//绘制圆角矩形
g.drawRoundRect(lineWidth, lineWidth, _width - lineWidth * 2, _height - lineWidth * 2 - _arrowHeight, 10, 10);
//绘制矩形下的小三角
g.moveTo(_arrowStart, _height - lineWidth - _arrowHeight);
g.lineTo(_arrowStart, _height);
g.lineTo(_arrowStart + _arrowWidth, _height - lineWidth - _arrowHeight);
g.endFill();
//绘制小三角和矩形的连接线的颜色
g.lineStyle(1, 0xFFFFFF);
g.moveTo(_arrowStart, _height - lineWidth - _arrowHeight);
g.lineTo(_arrowStart + _arrowWidth, _height - lineWidth - _arrowHeight);
这样tooltip就定制好了,最后还需要将网元和tooltip上显示的内容绑定

class="language-javascript">link.setClient('message', '3333M');
customTooltip.setText(element.getClient('message'));

原文出处和原代码请参见这里。




http://www.niftyadmin.cn/n/1765890.html

相关文章

TWaver在电力系统中的应用

原文出处:http://twaver.servasoft.com/?p3945 TWaver作为一款专业的图形界面控件,可以应用在各行各业中。本文我们就来详细介绍一下TWaver如何绘制出电力系统的界面。我们现在看看几张电力系统的图: 某变电站设备接线图一 某变电所的接线图二 当然这…

Make an TWaver HTML5 iPhone App

构建iOS App有很多技术方式可以选择,本文介绍基于UIWebView的Cocoa Touch组件嵌入HTML页面的方式实现的一个iPhone App例子。文中将穿插iOS的基本内容,TWaver HTML5的基础应用,以及Objective C与Javascript相互调用的技术点。 首先通过XCode构…

jQuery学习笔记(简介,选择器)

jQuery优势 1. 强大的选择器。jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。 2. 出色的DOM操作封装 3. 可靠的事件处理机制 4. 完善的Ajax。jQuery将所有的Ajax操作封装到一个函数$.Ajax()里,使得开发者处理A…

Android如何显示音标

Android如何显示音标 比如:http://www.iciba.com/imperious/,那么音标是: [ɪmˈpɪəri:əs] 怎么显示它,这是个问题。 下面图是不正确的显示音标(左)和正确显示的截图: 下面说说如何解决的。 …

TWaver 3D 编辑器的使用(一)----设计3D场景以及数据绑定

TWaver提供了一套3D场景的开发包,用来帮助用户快速搭建3D场景,实现3D的监控系统。这个开发包目前商推的只有Flex框架下的版本,被称为TWaver3D for Flex。开发包提供简单的API,用户向TWaver的数据对象(例如Node&#xf…

基于Visual C++2013拆解世界五百强面试题--题4-double转换成字符串

请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据、int类型的数据想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解。浮点数编码转换使用的是IEEE的编码标准。类型存储位数​​​偏置值​​数符(S)阶码(E)尾数(M)总…

Closed Fences USACO 3.4(阵亡)

描述 一个闭合的栅栏是平面上的一些不相交的首尾相连的线段形成的多边形&#xff0c;有N个角(顶点) (3 < N < 200)。 顶点不重合&#xff0c;它以逆时针方式以数组{xi, yi}给出(i1,2,...,N)。 每一对相邻的顶点都是一条栅栏。因此共有N条栅栏 (定义xN1x1, yN1y1)。 这里有…

?? 运算符

?? 运算符定义在将可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。 int? c null;// d c, unless c is null, in which case d -1. int d c ?? -1; 此运算符还可用于多个可以为 null 的类型。例如&#xff1a; int? e null; int? f null;// g e or…