当前位置: 网学 > 编程文档 > Android > 正文

Android自定义View

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了Android自定义View的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!


    Android高手进阶教程三)之----Android中自定义View的应用高手进阶教程(三之的应用.
    2010-04-1821:11:25
    标签:Android进阶View定义教程原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。weizhulin.blog.51cto/1556324/311457
    大家好我们今天的教程是在Android教程中自定义View的学习,对于初学着来说,他们习惯了Android传统的页面布局方式,如下代码:viewplaincopytoclipboardprint?
    1.2.
    7.
    12.13.14.
    19.
    24.
     当然上面的布局方式可以帮助我们完成简单应用的开发了,但是如果你想写一个复杂的应用,这样就有点牵强了,大家不信可以下源码都研究看看,高手写的布局方式,如上面的布局高手通常是这样写的:viewplaincopytoclipboardprint?
    1.2.3.4.5.6.7.
    8.

    viewplaincopytoclipboardprint?其中AextendsLinerLayout,BextendsTextView.其中AextendsLinerLayout,BextendsTextView.为了帮助大家更容易理解,我写了一个简单的Demo,具体步骤如下:首先新建一个Android工程命名为ViewDemo.然后自定义一个View类,命名为MyView(extendsView).代码如下:
    1.viewplaincopytoclipboardprint?2.packagecom.android.tutor;3.importandroid.content.Context;4.importandroid.graphics.Canvas;5.importandroid.graphics.Color;6.importandroid.graphics.Paint;7.importandroid.graphics.Rect;8.importandroid.graphics.Paint.Style;9.importandroid.util.AttributeSet;10.importandroid.view.View;11.publicclassMyViewextendsView{12.13.privatePaintmPaint;privateContextmContext;
     14.;15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.}
    privatestaticfinalStringmString="WelcometoMrWei'sblog"
    publicMyView(Contextcontext){super(context);
    }publicMyView(Contextcontext,AttributeSetattr){super(context,attr);
    }@OverrideprotectedvoidonDraw(Canvascanvas){//TODOAu
    to-generatedmethodstubsuper.onDraw(canvas);
    mPaint=newPaint();
    //设置画笔颜色mPaint.setColor(Color.RED);//设置填充mPaint.setStyle(Style.FILL);
    //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标canvas.drawRect(newRect(10,10,100,100),mPaint);
    mPaint.setColor(Color.BLUE);//绘制文字canvas.drawText(mString,10,110,mPaint);}
    45.packagecom.android.tutor;46.importandroid.content.Context;47.importandroid.graphics.Canvas;48.importandroid.graphics.Color;49.importandroid.graphics.Paint;50.importandroid.graphics.Rect;51.importandroid.graphics.Paint.Style;52.importandroid.util.AttributeSet;53.importandroid.view.View;54.publicclassMyViewextendsView{55.privatePaintmPaint;56.privateContextmContext;
     57.privatestaticfinalStringmString="WelcometoMrWei'sblog";58.59.publicMyView(Contextcontext){60.61.62.}63.publicMyView(Contextcontext,AttributeSetattr)64.{65.66.67.}68.@Override69.protectedvoidonDraw(Canvascanvas){70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.}87.}88.89.然后将我们自定义的View加入到main.xml布局文件中,代码如下:90.viewplaincopytoclipboardprint?91.92.mPaint.setColor(Color.BLUE);//绘制文字canvas.drawText(mString,10,110,mPaint);//画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标canvas.drawRect(newRect(10,10,100,100),mPaint);//设置画笔颜色mPaint.setColor(Color.RED);//设置填充mPaint.setStyle(Style.FILL);mPaint=newPaint();//TODOAuto-generatedmethodstubsuper.onDraw(canvas);super(context,attr);super(context);
    97.     100.101.102.103.104.105.106.107.108./>
    android:text="@string/hello"/>    android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">    最后执行之,效果如下图:
    OK,大功告成,今天就写到这里,开始做饭了,老婆孩子等我做饭了,lol~
     对于Android系统的自定义View可能大家都熟悉了,对于自定义View的属性添加,以及And
    roid的Layout的命名空间问题,很多网友还不是很清楚,今天Android123一起再带大家温习一下。
    1.
    CwjViewmyView=newCwjView(context);复制代码
    如果用于游戏或整个窗体的界面,我们可能直接在onCreate中setContentView(myView);当然如果是控件,我们可能会需要从Layout的xml中声明,比如
    1.2.3.
    
    复制代码
    当然,我们也可以直接从父类声明比如
    1.2.3.
    
    复制代码
    上面我们仅用了父类View的两个属性,均来自android命名空间,而名称为layout_width或layout_height,我们自定义的控件可能有更多的功能,比如
    1.2.3.
    
    复制代码
    我们可以看到上面的三个属性,是我们自定义的。作为标准xml规范,可能还包含了类似xmlns:android="schemas.android/apk/res/android"这样的语句,对于定义完整的View,我们的命名空间为cwj,这里可以写为
     xmlns:cwj=schemas.android/apk/res/cn.android123.cwjView或xmlns:cwj=schemas.android/apk/res/android都可以。对于定义的cwj命名空间和age、university以及city的三个属性我们如何定义呢?在工程的res/values目录中我们新建一个cwj_attr.xml文件,编码方式为utf-8是一个好习惯,内容如下
    1.
    2.
    3.4.5.6.
    7.8.
复制代码
    这里我们可能对format不是很熟悉,目前Android系统内置的格式类型有integer比如ProgressBar的进度值,float比如RatingBar的值可能是3.5颗星,boolean比如ToggleButton的是否勾选,string比如TextView的text属性,当然除了我们常见的基础类型外,Android的属性还有特殊的比如color是用于颜色属性的,可以识别为#FF0000等类型,当然还有dimension的尺寸类型,比如23dip,15px,18sp的长度单位,还有一种特殊的为reference,一般用于引用@+id/cwj@drawable/xxx这样的类型。当然什么时候用reference呢?我们就以定义一个颜色为例子,
    1.
    复制代码
    这里我们用了逻辑或的运算符,定义的红色是颜色类型的,同时可以被引用当然,对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法来获取我们的定义
    。在我们自定义View的构造方法(Contextcontext,AttributeSetattrs)的重载类型中可以用
    1.
    publicCwjView(Contextcontext,AttributeSetattrs){2.super(context,attrs);
    3.
    TypedArraya=context.obtainStyledAttributes(attrs,4.R.styleable.cwj_attr);
    5.
    mAge=a.getInteger(R.styleable.CwjView_age,22);
     6.7.
    mCity=a.getString(R.styleable.CwjView_city,"shanghai");mUniversity=a.getString(R.styleable.CwjView_university,"sjtu");8.
    9.
    a.recycle();//Android123提示大家不要忘了回收资源10.11.}复制代码
    这样类的全局成员变量mAge、mCity就获取了我们需要的内容,当然根据layout中的数值我们自定义的CwjView需要动态的处理一些数据的情况,可以使用AttributeSet类的getAttributeResourceValue方法获取。
    1.
    publicCwjView(Contextcontext,AttributeSetattrs)2.3.{
    super(context,attrs);
    4.5.
    resId=attrs.getAttributeResourceValue("cn.android123.CwjView","age",100);resId=attrs.getAttributeResourceValue("cn.android123.CwjView","city","shanghai");6.//resID就可以任意使用了7.}
    复制代码
    以上两种方法中,参数的最后一个数值为默认的,如果您有不明白的地方可以来函到android123@163我们会在第一时间回复。(文/Android开发网)
    Android自定义View2009年10月13日星期二18:12在values/attrs.xml中:
    

    编写MyView.java,继承Viewpackagetest.cuntomizedview;importjava.util.Calendar;importimportimportimportimportimportimportimportimporttest.cuntomizedview.R;android.content.Context;android.content.res.TypedArray;android.graphics.Canvas;android.graphics.Color;android.graphics.Paint;android.os.SystemClock;android.util.AttributeSet;android.view.View;
    publicclassMyViewextendsView{privatePaintmPaint;privateContextmContext;privateStringmStr;publicMyView(Contextcontext,AttributeSetattrs){super(context,attrs);mContext=context;initMyView();TypedArrayparams=context.obtainStyledAttributes(attrs,R.styleable.MyView);intbackgroudId=params.getResourceId(R.styleable.MyView_imgBackground,0);if(backgroudId!=0)setBackgroundResource(backgroudId);inttextColor=params.getColor(R.styleable.MyView_textColor,0XFFFFFFFF);setTextColor(textColor);
     floattextSize=params.getDimension(R.styleable.MyView_textSize,36);setTextSize(textSize);floatpaddingLeft=params.getDimension(R.styleable.MyView_textPaddingLeft,41);floatpaddingTop=params.getDimension(R.styleable.MyView_textPaddingTop,21);setPaddings(paddingLeft,paddingTop);}@Overrideprot
    ectedvoidonDraw(Canvascanvas){super.onDraw(canvas);if(mStr!=null){canvas.drawText(mStr,0,0,mPaint);}canvas.drawText("heiheihei",30,60,mPaint);}privatevoidinitMyView(){mPaint=newPaint();mPaint.setColor(Color.WHITE);}privatevoidsetTextColor(inttextColor){mPaint.setColor(0XFFAABBCC);}privatevoidsetTextSize(floattextSize){mPaint.setTextSize(textSize);}privatevoidsetPaddings(floatpaddingLeft,floatpaddingTop){setPadding((int)paddingLeft,(int)paddingTop,0,0);}}//注意怎样在attrs中怎样定义background并取得background。在layout中使用MyView,main.xml     xmlns:android="schemas.android/apk/res/android"xmlns:app="schemas.android/apk/res/test.cuntomizedview"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">
    
    
  • 上一篇资讯: android视频监控
  • 下一篇资讯: Android自动更新
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号