本文来自: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>
分享到:
相关推荐
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。本项目“android自定义View仿QQ计步器”旨在模仿QQ应用中的计步器视图,以提供一个实时展示用户步行步数、距离...
在Android开发中,自定义地图是一项重要的技能,它允许开发者根据特定需求打造个性化的地图界面。本篇将深入探讨如何实现“Android自定义地图”,包括定位图标、自适应缩放、手势缩放以及双击缩放功能。 首先,我们...
在Android中,创建自定义View通常需要以下几个步骤: 1. 创建一个新的Java类,继承自`View`或`ViewGroup`。 2. 在`onDraw()`方法中绘制按钮的图形。这里可能涉及到`Canvas`、`Paint`、`Rect`等对象的使用,以及`...
在Android中,我们可以使用Spinner组件来实现类似的功能,但为了实现自定义的样式和行为,我们需要自己构建一个PopupWindow。PopupWindow允许我们在屏幕上的任意位置显示一个浮动窗口,非常适合用来模拟下拉列表的...
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”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...
"android尺子功能"的实现涉及到图形绘制、触摸事件处理、自定义View等多个核心知识点。以下是对这些技术点的详细说明: 1. **自定义View**:在Android中,尺子功能通常需要我们创建一个自定义View,因为系统并未...
1. **自定义View类**:开发者需要继承`View`或` ViewGroup`,并重写`onDraw()`方法绘制自定义的图形。对于滚动输入,可能还需要实现触摸事件处理,如`onTouchEvent()`。 2. **布局文件**:在XML布局文件中声明...
7. **自定义View**:如果应用有特殊界面需求,可能涉及到自定义View的编写。 8. **Material Design**:遵循Google的 Material Design 设计规范,提供一致的用户体验。 9. **Gradle构建系统**:理解build.gradle文件...
这个功能主要涉及到Android自定义View的开发,以及动画的实现,以下将详细介绍这两个核心知识点。 首先,**自定义View**是Android开发中的一个重要部分。在"UC天气下拉"中,我们需要创建一个自定义的RefreshHeader...
【标题】"android应用源码zz-doctor中医大夫助理信息系统.rar"揭示了这是一份针对Android平台开发的应用程序源代码,专门设计用于辅助中医大夫进行日常工作。这个系统可能集成了病症诊断、处方建议、病例记录等多种...
6. UI设计:Android 4.0风格强调简洁和清晰,因此UI设计应该遵循Material Design的指导原则,即使在旧版本系统上,也要保持一致的视觉效果。 7. 国际化:虽然这个案例专注于中文输入,但考虑到全球化的应用,开发者...
7. **自定义组件**:源码可能包含了自定义View或自定义Adapter,以满足特定的UI需求。 8. **异常处理和日志记录**:源码可能包含了异常捕获机制,以及使用Logcat进行调试和问题排查的日志记录。 9. **版本控制**:...
6. **UI设计**:Android应用的界面设计遵循Material Design指南,提供一致的用户体验。源码中的XML布局文件会应用各种Material组件和主题,如Button、TextInputLayout等。 7. **自定义组件**:为了满足特定需求,...
【Android-RxFizzBuzz: 将经典编程挑战带到Android平台】 ...总的来说,`Android-RxFizzBuzz`是一个结合经典编程挑战和现代编程库的实例,对于提升Android开发者的技术素养和解决问题的能力具有很大的帮助。
总结,“android应用源码zz-doctor中医大夫助理信息系统”是Android开发与中医信息化结合的典型实例,它展示了如何利用现代技术服务于传统医学,同时也为开发者提供了一个学习和研究的宝贵资源。通过深入剖析其源码...
整个过程中,作者强调了自定义字段的命名规则,即字段名以ZZ开头,这是因为SAP系统中已经有很多以其他字母开头的标准字段,为了避免冲突,用户自定义的字段通常会使用以ZZ开头的命名约定。同时,作者还提到了设置...
"安卓Android源码——zz-doctor中医大夫助理信息系统.zip" 这个标题揭示了我们正在处理一个与安卓(Android)操作系统相关的项目,具体是一个名为"zz-doctor中医大夫助理信息系统"的应用程序的源代码。这个应用可能...
为了保证用户体验,开发者可能使用了Android的动画和过渡效果,以及自定义View来增强界面的视觉效果。同时,考虑到性能优化,他们可能运用了懒加载、缓存策略以及异步加载等技术。 最后,源码的构建和测试环节会...