自定义控件入门及案例

自定义控件一般分为2种:

1.组合控件

第1种形式:自定义一个类继承任意一个布局(XXLayout),然后复写它的构造方法,填充view,得到XML属性并设置属性。这

种形式我在上一篇文章已经详细讲到  http://4259297.blog.51cto.com/4249297/1683192

第2种形式:由Android原生的控件组合起来,配合动画实现的效果。

2.自定义控件:

控件之所以能由代码转换成视图展现在屏幕上,在底层主要会做3件事:测量(measure)、布局(layout)、绘制(draw),对应的

控件类的3个方法onMeasure、onLayout、onDraw

自定义控件也有3种形式

第1种:View控件继承View,需要复写测量(onMeasure)、绘制(onDraw)方法。因为View的摆放位置,是由它的父控件

ViewGroup来决定。测量是指测量自身的大小。

第2种:ViewGroup控件组,继承ViewGroup,需要复写测量(onMeasure)、布局(onLayout)两个方法。测量是指测量控件组里的

控件的大小,布局是指怎么摆它里面的控件。绘制就不需要复写了,因为这是由控件组里的控件来完成的。

第3种:升级控件,继承已有的Android控件,在它的基础之上再作一些修改。

下面就总结一下老师上课所讲的案例,作为对自定义控件抛砖引玉作用吧...

组合控件案例

    案例1:优酷菜单

        

        

        上面的这个动画录制得比较的粗糙,真实速度是没有这么快的。

 1)素材和布局

优酷菜单分为三级,每一级采用的都是相对布局(因为菜单里的控件是沿着弧形摆放的),而且三个布局的三个上下的中

心在一条直线且在activity里水平居中。三个相对布局是相互叠加在一起的,所以最顶层的布局只能是相对布局或帧布局。

给3个布局由里到外取名为level1、level2、level3。

想要实现这样的效果,图片的尺寸是需要计算和设计的,且要为透明。

 2)动画类的制作

             分析可知,显示或隐藏动画是通过旋转动画来完成的,动画有重载形式(有延时与无延时),且动画之间是有关系的(动

画的个数统计,动画监听机制),所以动画应该写在一个类当中。

    /**
     * 自定义动画工具类
     * 工具类不一定非要是静态的方法,静态虽然不用new,但是会有太多的限制。
     * @author LENOVO
     * 
     */
    
    
    public class MyAnimUtils {
	  public int runningAnimations = 0;
	  MyAnimationListener listener = new MyAnimationListener();
	  
	//暴露方法-有没有动画正在运行
	  public boolean isRunningAnimation()
	  {
		  return runningAnimations != 0;
	  }
	  
	  
	  
	// 隐藏菜单动画
	public  boolean startHideAnimation(Context context, View view) {
		return startHideAnimation(context, view, 0);
	}

	// 隐藏菜单动画-延时
	public  boolean startHideAnimation(Context context, View view,
			int startOffset) {

		//因为补间动画不会改变控件原有的坐标位置,虽然不可见了,但是还是可以点击。
		// 找到View里所有的控件,使它们不可用。
		RelativeLayout rl = (RelativeLayout) view;
		int childCount = rl.getChildCount();
		for (int i = 0; i < childCount; i++) {
			rl.getChildAt(i).setEnabled(false);
		}

		Animation hideAnimation = AnimationUtils.loadAnimation(context,
				R.anim.zero_to_fu180);
		hideAnimation.setStartOffset(startOffset);
		view.startAnimation(hideAnimation);
		// 动画监听
		hideAnimation.setAnimationListener(listener);
		return false; // 表示隐藏菜单
	}

	// 显示菜单动画
	public  boolean startShowAnimation(Context context, View view) {
		return startShowAnimation(context, view, 0);
	}

	// 显示菜单动画-延时
	public  boolean startShowAnimation(Context context, View view,
			int startOffset) {

		// 找到View里所有的控件,使它们可用。
		RelativeLayout rl = (RelativeLayout) view;
		int childCount = rl.getChildCount();
		for (int i = 0; i < childCount; i++) {
			rl.getChildAt(i).setEnabled(true);
		}

		Animation showAnimation = AnimationUtils.loadAnimation(context,
				R.anim.fu180_to_zero);
		showAnimation.setStartOffset(startOffset);
		view.startAnimation(showAnimation);
		// 动画监听
		showAnimation.setAnimationListener(listener);
		return true; // 表示显示菜单
	}

	//自定义动画监听类(自己监听自己)
	private class MyAnimationListener implements AnimationListener
	{
		@Override
		public void onAnimationStart(Animation animation) {
			runningAnimations++;
		}

		@Override
		public void onAnimationRepeat(Animation animation) {

		}

		@Override
		public void onAnimationEnd(Animation animation) {
			runningAnimations--;
		}
	}

    }

 3)显示或隐藏动画的布局和逻辑

            第1步:初始化操作

                实例动画类,findview,注册点击事件。

            第2步:点击事件

              ■menu(菜单)键的点击事件逻辑

                 如果第三级菜单level3隐藏/关闭,关闭/隐藏第三级菜单level3,且在关闭/隐藏动画未执行完之前,不会执行隐藏

/关闭动画。



自定义控件案例    

时间: 2024-10-11 21:31:08

自定义控件入门及案例的相关文章

C# 自定义控件入门

自定义控件初学成果: 为了完善仿Windows的画板,做了一个很原始的颜色抬取控件.现在将大致的过程介绍下.大家也可以直接下载工程文件. 平台:VS 2005 WINFORM 语言:C# 最终效果图: 光看看图片似乎说明不了什么问题,还是接着往下看吧! 要想在VS 2005 winform 中编辑自定义控件,步骤如下: 1.点击文件->新建项目->选择Windows控件库 2.编辑控件 3.点击生成->生成 项目名称 ,完成这一步后会在bin或debug目录下看到"项目名称.d

02SpringMvc_springmvc快速入门小案例(XML版本)

这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图: 第一步:创建springmvc-day01这么一个web应用 第二步:导入springioc,springweb , springmvc相关的jar包 第三步:在/WEB-INF/下创建web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.

winform制作自定义控件(入门)

原文链接:http://blog.csdn.net/bychentufeiyang/article/details/7081402   与原文基本一致,只是例子变成VS2012环境,语言采用博主常用的VB.NET 一 .概述Windows 窗体控件是可再次使用的组件,它们封装了用户界面功能,并且可以用于客户端 Windows 应用程序.“Windows 窗体”不仅提供了许多现成控件,还提供了自行开发控件的基础结构.可以组合现有控件.扩展现有控件或创作自己的自定义控件.Windows 窗体控件是从

spring boot入门小案例

spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,application.properties中放spring boot相关配置 (2) 在pom.xml中加入spring boot 依赖包 (3)在cn.com.rxyb中新建启动类APP 1 package cn.com.rxyb; 2 import org.springframework.boot.Spri

ASP.NET自定义控件入门Demo

最近看了MSDN关于自定义控件的介绍,根据官方的文档,自己学着做了一个简单的Demo给需要的朋友参考. ASP.NET 源生的TextBox是不带Label标签的,这里我要实现的是创建一个带Label标签的TextBox,并且默认填充Text值为GUID(只读) 实际上现在很多第三方组件都有这种控件,如Ext.Net,FineUI等等.这里只是为了学习了解自定义控件的开发. 步入正题 1.在VS2010中创建一个类库项目,我选择的框架是3.5.名称“MyTextBoxControl” 2.然后新

Spring中AOP的初窥和入门小案例

AOP:面向切面编程 AOP的主要作用:是为了程序员更好的关注"业务",专心"做事" 加上双引号的意思:所谓业务,是指他的核心,各行业中需要处理的核心事务,核心啊 像日志的记录,事务的管理,权限分配等这些交叉业务,同一个项目中使用多次,直接提取出来成为公共的比较好,再用面向切面的方式,进行代码的编辑,业务的实现 AOP的原理  入门案例: 用最基本的方式模拟一道日志的记录和最后执行完业务的操作 DAO层(一个接口,一个他的实现类,模拟操作修改数据库) package

【iOS】自定义控件入门:可拖动的环形进度

有时候UIKit的标准控件并不能满足我们的需求,因此我们可以通过自定义控件得到满足我们需求的控件,例如这篇文章将教你如何自定义一个圆形的进度条,并且用户可以通过拖动进度条上的手柄来改变进度值.主要参考了这篇文章:HOW TO BUILD A CUSTOM CONTROL IN IOS.广告时间:我的一个免费APP:午睡闹钟 使用了这个控件,欢迎大家在AppStore搜索午睡闹钟进行下载使用. 我们的自定义控件继承自UIControl类,它是UIView的子类,是所有UIKit控件(UIButto

struts2框架快速入门小案例

struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: apps: 例子程序 docs:文档 lib:struts2框架所应用的jar以及插件包 src:源代码 core 它是struts2的源代码 xwork-core struts2底层使用了xwork,xwork的源代码 注意:在struts2开发,一般情况下最少导入的jar包,去apps下的struts2-b

CK2041-React.js入门与案例开发

随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853进行交流得到帮助,获取学习资料. 下载地址:http://pan.baidu.com/s/1jI05TPW 基础和实战衔接如此好的React.js课程 给你一个从入门到真实开发的机会 没有react.js基础也没关系 - 从入门开始给你讲透 课程从R