自定义组件

自定义组件之规则分布按钮的菜单

北城以北 提交于 2020-03-16 14:21:26
某厂面试归来,发现自己落伍了!>>> 废话不多说,先上效果图(下了几个屏幕录制软件,效果不是很好,只能截取部分图片了,各位有什么好用的推荐下): 图中间的圆形布局菜单是一个继承ViewGroup的组件,可以动态添加外围菜单按钮个数,会自动围绕中间按钮形成一个圆圈。不过外围的按钮不要太多,不然会重叠,而且太多也不好看。 主要思路就是重写ViewGroup的onMeasure()和onLayout()这两个方法。其中onMeasure()用来计算组件所需的区域大小,可以根据实际需要进行计算。onLayout()方法中根据需求摆放你的childView。 接下来,重点讲下如何计算组件的大小。首先,组件区域肯定是一块矩形区域,本组件刚好是一个正方形。所有外围childView围成的圆是这个正方形区域的内接圆。假设这个正方形区域的宽和高分别为Width和Height,中心圆的半径为centerR,外围圆的半径为outsideR,中心圆和外围圆之间间隔Dur,以外围childView围成的圆半径为R。那么 Width = Height = (centerR/2 + outsideR + Dur)*2; R = centerR/2 + outsideR/2 + Dur; 正方形区域的算法就这么简单。但是,在 onMeasure()方法中,有一个东东一定要会用,那就是MeasureSpec

常用UI框架通过Graphics完全自定义组件的方法

痞子三分冷 提交于 2019-12-14 17:49:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> flash/flex: 每一个在flash player中的可视化对象都包含flash.display.Graphics类的实例。 基于flex框架,通常override protected function updateDisplayList(w:Number,h:Number):void; awt/swing: 通过继承JComponent类或其子类,有两种方法获取Graphics或者Graphics2D类的实例: 1.从@override void paintComponent(Griphics g),绘制结果是持久的。 2.通过调用JComponent实例的方法getGraphics方法获取,绘制结果非持久的。 swt/jface: 通过继承Composite类或其子类自定义组件。 有两种使用GC对象的方法: 1.使用GC的构造方法来创建GC对象。 GC(Drawable drawable)或者GC(Drawable drawable,int style) 2.通过addPaintListener( new PaintListener(){ public void paintControl(PaintEvent e){ e.gc.drawOval(0,0,80,80); } } ); 来源:

Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

此生再无相见时 提交于 2019-12-09 19:31:42
Android中自定义样式与View的构造函数中的第三个参数defStyle的意义 零、序   系统自带的View可以在xml中配置属性,对于写的好的Custom View同样可以在xml中配置属性,为了使自定义的View的属性可以在xml中配置,需要以下4个步骤: 通过<declare-styleable>为自定义View添加属性 在xml中为相应的属性声明属性值 在运行时(一般为构造函数)获取属性值 将获取到的属性值应用到View   怎么将获取到的属性值应用到View就不用说了,自己定义的属性什么用处自己肯定是清楚的,所以接下来看一下前三点。 一、自定义Style   通过<declare-styleable>元素声明Custom View需要的属性即可,下面是一个例子,文件是res/values/attrs.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Customize"> <attr name="attr_one" format="string" /> <attr name="attr_two" format="string" /> <attr name="attr_three" format="string" /> <attr name="attr

开发自定义JSF组件(2) 使用Render渲染器

走远了吗. 提交于 2019-12-04 22:59:23
完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义JSF组件(3) 使用绑定变量 开发自定义JSF组件(4) 保存状态与恢复状态 开发自定义JSF组件(5) 在JSP中用JSF组件 上一节教程中定义的组件,使用组件本身的encodeBegin方法输出了html代码,更好的方法是使用Render类来输出,为什么要单独使用另外一个类来输出html代码呢?这跟mvc设计有关,这里的组件(model)保存了java的各种属性,而输出的视图可以是html、json、xml等等,所以需要使用Render类在model与view之间进行转换,通常我们只需要实现html的render就行了。 我们还是拿第1个教材的HelloWorld源代码进行改造 。 开发环境: Windows 7 IntelliJ IDEA 12.1.2 jboss-6.1.0.Final JSF 1.2 下面的5个步骤是这个组件的重构过程: 1、 定义组件UIHelloWorld,记住JSF的组件必须继承javax.faces.component.UIComponent或者它的子类。这里UIHelloWorld只是输出一句话,继承javax.faces.component.UIOutput最省事了,与上一节相比,这里去掉了encodeBegin方法

开发自定义JSF组件(5) 在JSP中用JSF组件

ⅰ亾dé卋堺 提交于 2019-12-04 22:59:08
完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义JSF组件(3) 使用绑定变量 开发自定义JSF组件(4) 保存状态与恢复状态 开发自定义JSF组件(5) 在JSP中用JSF组件 采用JSF架构的应用,也有很多项目是使用jsp而不是facelets。如果要在JSP里使用JSF组件,还得编写jsp的标签库,不过与JSP标签又不尽相同,下面我再次重构HelloWorld项目,看看JSP页面如何使用<ida:hellWorld />标签。 开发环境: Windows 7 IntelliJ IDEA 12.1.2 jboss-6.1.0.Final JSF 1.2 HelloWorld的 重构过程: 1、 新建HelloWorldTag,JSF1.2继承UIComponentELTag,网上很多教材都是JSF1.1版本的,继承的是UIComponentTag,这个类在JSF1.2已过时。 public class HelloWorldTag extends UIComponentELTag { private static final String COMPONENT_TYPE = "com.regaltec.faces.HelloWorld"; private static final String

开发自定义JSF组件(1) HelloWorld

橙三吉。 提交于 2019-12-03 21:02:24
完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义JSF组件(3) 使用绑定变量 开发自定义JSF组件(4) 保存状态与恢复状态 开发自定义JSF组件(5) 在JSP中用JSF组件 公司决策层选择了JSF做页面,WEB开发人员不容易呀,一个页面动不动就几千行,如果一个新人加入团队,估计都看晕了。我今天要写的课程,就是跟简化页面代码有关系了。自定义组件不但可以复用代码,还能让页面的代码更简洁。自定义JSF组件与JSP标签不是一回事,这里我做一个HelloWolrd的示例,这个示例是循次渐进的演进,不只是一个简单的Hello World,不过看这课程的同学需要有JSF基础。 用过JSF的同学都知道,JSF的视图可以选择JSP或Facelets技术,而绝大部份人好像对Facelets情有独钟,我们公司也不例外用了Facelets。所以我们就从做一个支持Facelets组件开始。 这个组件组件很简单,就是根据name属性输出一句话,如下面这行代码输出为:你好,世界! <ida:helloWorld name="世界" /> 开发环境: Windows 7 IntelliJ IDEA 12.1.2 jboss-6.1.0.Final JSF 1.2 下面的步骤是实现这个组件的过程: 1、