`
viluo
  • 浏览: 27634 次
  • 性别: 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

    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来增强界面的视觉效果。同时,考虑到性能优化,他们可能运用了懒加载、缓存策略以及异步加载等技术。 最后,源码的构建和测试环节会...

    自定义BufferedReader的实例

    自定义BufferedReader的实例 自定义BufferedReader的实例是Java中一种常用的输入流类,它可以从文件中读取数据。BufferedReader的核心机制是使用缓冲区来存储数据,从而提高数据传输的性能。在本文中,我们将详细...

Global site tag (gtag.js) - Google Analytics