`
viluo
  • 浏览: 27564 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

[zz]Android自定义View:初探实例

阅读更多

本文来自:http://www.cnblogs.com/ufocdy/archive/2011/05/17/2048958.html

 

Android自定义View实现很简单

继承View,重写构造函数、onDraw,(onMeasure)等函数。

如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml。在其中定义你的属性。

在使用到自定义View的xml布局文件中需要加入xmlns:前缀="http://schemas.android.com/apk/res/你的自定义View所在的包路径".

在使用自定义属性的时候,使用前缀:属性名,如my:textColor="#FFFFFFF"。

实例:

 

    package demo.view.my;   
    import android.content.Context;   
    import android.content.res.TypedArray;   
    import android.graphics.Canvas;   
    import android.graphics.Color;   
    import android.graphics.Paint;   
    import android.graphics.Paint.Style;   
    import android.util.AttributeSet;   
    import android.view.View;   
    /**  
     * 这个是自定义的TextView.  
     * 至少需要重载构造方法和onDraw方法  
     * 对于自定义的View如果没有自己独特的属性,可以直接在xml文件中使用就可以了  
     * 如果含有自己独特的属性,那么就需要在构造函数中获取属性文件attrs.xml中自定义属性的名称  
     * 并根据需要设定默认值,放在在xml文件中没有定义。  
     * 如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,  
     * 比如这里是xmlns:my="http://schemas.android.com/apk/res/demo.view.my"  
     * 其中xmlns后的“my”是自定义的属性的前缀,res后的是我们自定义View所在的包  
     * @author Administrator  
     *  
     */  
    public class MyView extends View {   
           
        Paint mPaint; //画笔,包含了画几何图形、文本等的样式和颜色信息   
        public MyView(Context context) {   
            super(context);   
               
        }   
           
        public MyView(Context context, AttributeSet attrs){   
            super(context, attrs);   
            mPaint = new Paint();   
            //TypedArray是一个用来存放由context.obtainStyledAttributes获得的属性的数组   
            //在使用完成后,一定要调用recycle方法   
            //属性的名称是styleable中的名称+“_”+属性名称   
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView);   
            int textColor = array.getColor(R.styleable.MyView_textColor, 0XFF00FF00); //提供默认值,放置未指定   
            float textSize = array.getDimension(R.styleable.MyView_textSize, 36);   
            mPaint.setColor(textColor);   
            mPaint.setTextSize(textSize);   
               
            array.recycle(); //一定要调用,否则这次的设定会对下次的使用造成影响   
        }   
           
        public void onDraw(Canvas canvas){   
            super.onDraw(canvas);   
            //Canvas中含有很多画图的接口,利用这些接口,我们可以画出我们想要的图形   
            //mPaint = new Paint();   
            //mPaint.setColor(Color.RED);   
            mPaint.setStyle(Style.FILL); //设置填充   
            canvas.drawRect(10, 10, 100, 100, mPaint); //绘制矩形   
               
            mPaint.setColor(Color.BLUE);   
            canvas.drawText("我是被画出来的", 10, 120, mPaint);   
        }   
    }  

 

相应的属性文件:

 

    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <declare-styleable name="MyView">  
            <attr name="textColor" format="color"/>  
            <attr name="textSize" format="dimension"/>  
        </declare-styleable>  
    </resources>  

 

在布局文件中的使用:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
                  xmlns:my="http://schemas.android.com/apk/res/demo.view.my"    
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  
           
        <demo.view.my.MyView  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"    
            my:textColor="#FFFFFFFF"    
            my:textSize="22dp"  
            />  
    </LinearLayout>  
 
分享到:
评论
1 楼 freedomray 2011-10-10  
楼主,把你的代码和文件拷贝到eclipse里,发现编译出错。布局文件没有通过变异,无法识别xml名字空间my。这是咋回事呢?我用的是ADT12版本。

相关推荐

    android自定义View仿QQ计步器

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。本项目“android自定义View仿QQ计步器”旨在模仿QQ应用中的计步器视图,以提供一个实时展示用户步行步数、距离...

    Android 自定义地图

    在Android开发中,自定义地图是一项重要的技能,它允许开发者根据特定需求打造个性化的地图界面。本篇将深入探讨如何实现“Android自定义地图”,包括定位图标、自适应缩放、手势缩放以及双击缩放功能。 首先,我们...

    android自定义滑动启动和关闭按钮

    在Android中,创建自定义View通常需要以下几个步骤: 1. 创建一个新的Java类,继承自`View`或`ViewGroup`。 2. 在`onDraw()`方法中绘制按钮的图形。这里可能涉及到`Canvas`、`Paint`、`Rect`等对象的使用,以及`...

    android 使用activity自定义下拉选择列表

    在Android中,我们可以使用Spinner组件来实现类似的功能,但为了实现自定义的样式和行为,我们需要自己构建一个PopupWindow。PopupWindow允许我们在屏幕上的任意位置显示一个浮动窗口,非常适合用来模拟下拉列表的...

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    ZZ_MODIFIED_GEEBINF.ENS.zip endnote的样式文件

    标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...

    android尺子功能

    "android尺子功能"的实现涉及到图形绘制、触摸事件处理、自定义View等多个核心知识点。以下是对这些技术点的详细说明: 1. **自定义View**:在Android中,尺子功能通常需要我们创建一个自定义View,因为系统并未...

    安卓自定义控件相关-Android4.0风格中文滚动输入.zip

    1. **自定义View类**:开发者需要继承`View`或` ViewGroup`,并重写`onDraw()`方法绘制自定义的图形。对于滚动输入,可能还需要实现触摸事件处理,如`onTouchEvent()`。 2. **布局文件**:在XML布局文件中声明...

    安卓Android源码——zz-doctor中医大夫助理信息系统(简化版).zip

    7. **自定义View**:如果应用有特殊界面需求,可能涉及到自定义View的编写。 8. **Material Design**:遵循Google的 Material Design 设计规范,提供一致的用户体验。 9. **Gradle构建系统**:理解build.gradle文件...

    android 仿UC天气下拉和微信下拉眼睛

    这个功能主要涉及到Android自定义View的开发,以及动画的实现,以下将详细介绍这两个核心知识点。 首先,**自定义View**是Android开发中的一个重要部分。在"UC天气下拉"中,我们需要创建一个自定义的RefreshHeader...

    android应用源码zz-doctor中医大夫助理信息系统.rar

    【标题】"android应用源码zz-doctor中医大夫助理信息系统.rar"揭示了这是一份针对Android平台开发的应用程序源代码,专门设计用于辅助中医大夫进行日常工作。这个系统可能集成了病症诊断、处方建议、病例记录等多种...

    Android高级应用源码-Android 4.0风格中文滚动输入.zip

    6. UI设计:Android 4.0风格强调简洁和清晰,因此UI设计应该遵循Material Design的指导原则,即使在旧版本系统上,也要保持一致的视觉效果。 7. 国际化:虽然这个案例专注于中文输入,但考虑到全球化的应用,开发者...

    android应用源码zz-doctor中医大夫助理信息系统.zip

    7. **自定义组件**:源码可能包含了自定义View或自定义Adapter,以满足特定的UI需求。 8. **异常处理和日志记录**:源码可能包含了异常捕获机制,以及使用Logcat进行调试和问题排查的日志记录。 9. **版本控制**:...

    android应用源码zz-doctor中医大夫助理信息系统源码.zip

    6. **UI设计**:Android应用的界面设计遵循Material Design指南,提供一致的用户体验。源码中的XML布局文件会应用各种Material组件和主题,如Button、TextInputLayout等。 7. **自定义组件**:为了满足特定需求,...

    Android-RxFizzBuzz:RxFizzBu​​zz 的另一个例子,现在在 Android 上

    【Android-RxFizzBuzz: 将经典编程挑战带到Android平台】 ...总的来说,`Android-RxFizzBuzz`是一个结合经典编程挑战和现代编程库的实例,对于提升Android开发者的技术素养和解决问题的能力具有很大的帮助。

    android应用源码zz-doctor中医大夫助理信息系统.zip源码资源下载

    总结,“android应用源码zz-doctor中医大夫助理信息系统”是Android开发与中医信息化结合的典型实例,它展示了如何利用现代技术服务于传统医学,同时也为开发者提供了一个学习和研究的宝贵资源。通过深入剖析其源码...

    采购订单抬头和行项目屏幕增强&BAPI传入自定义字段

    整个过程中,作者强调了自定义字段的命名规则,即字段名以ZZ开头,这是因为SAP系统中已经有很多以其他字母开头的标准字段,为了避免冲突,用户自定义的字段通常会使用以ZZ开头的命名约定。同时,作者还提到了设置...

    安卓Android源码——zz-doctor中医大夫助理信息系统.zip

    "安卓Android源码——zz-doctor中医大夫助理信息系统.zip" 这个标题揭示了我们正在处理一个与安卓(Android)操作系统相关的项目,具体是一个名为"zz-doctor中医大夫助理信息系统"的应用程序的源代码。这个应用可能...

    Android应用源码之zz-doctor中医大夫助理信息系统(简化版).zip

    为了保证用户体验,开发者可能使用了Android的动画和过渡效果,以及自定义View来增强界面的视觉效果。同时,考虑到性能优化,他们可能运用了懒加载、缓存策略以及异步加载等技术。 最后,源码的构建和测试环节会...

Global site tag (gtag.js) - Google Analytics