`

Android自定义View之一:初探实例

阅读更多

Android自定义View实现很简单

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

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

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

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

实例:

[code="java"] 
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> 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenjie19891104/archive/2011/04/11/6315668.aspx

 

分享到:
评论

相关推荐

    学习Android开发之RecyclerView使用初探

    在Android应用开发中,RecyclerView是ListView的一个强大替代品,尤其在遵循Material Design规范时更为适用。RecyclerView因其灵活性和高效性能而被广泛采用。在本文中,我们将探讨RecyclerView的基本使用和与...

    AndroidAnimationExercise:Android动画的各种实现,包括帧动画,补间动画和属性动画的总结分享

    主要内容是Android动画,Android自定义视图相关的知识,包含一些常见应用中动画效果的模仿实例。随着时间的推移,里面积累的很多代码,大致用5个片段进行分类:扫一扫体验: ImitateFragment(模仿三方应用特效)仿...

    Android 开发技巧

    9.86、ANDROID自动化测试初探 324 9.86.1、捕获Activity上的Element 324 9.86.2、Hierarchyviewer 捕获Element的 328 9.86.3、架构实现 330 9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再...

    Flappy_Bird:这是我的第一个Android游戏应用程序

    总结,"Flappy_Bird"项目作为一个Android游戏开发的实例,涵盖了Java编程、Android SDK、游戏设计原理等多个知识点。对初学者而言,通过研究这个项目,可以深入了解Android游戏开发的基本流程和技术要点,为进一步的...

    Qt Quick核心编程

    QML与C++混合编程、Canvas、定制及自定义控件等高级主题,《Qt Quick核心编程》也做了详细讲解,同时提供了多个精彩的实作实例,力求概念清晰,用途明确。《Qt Quick核心编程》的内容适用于桌面与Android平台。值得...

    位置

    通过以上分析,我们可以看出,Spot项目不仅是Android开发的一个实例,也是Java在移动应用中的实际运用。它涵盖了Android开发的多个重要方面,包括UI设计、数据处理、网络通信和组件交互等,对于学习和理解Android...

    Project_Joli:我的第一个使用Unity的游戏

    本文将基于“Project Joli”这一实例,深入浅出地探讨使用Unity进行游戏开发的基本流程和技术要点。 一、Unity入门 Unity使用C#作为主要编程语言,这使得它对有.NET背景的开发者非常友好。C#语言简洁且功能强大,...

Global site tag (gtag.js) - Google Analytics