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);
}
}
相应的属性文件attrs.xml:
<?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应用开发中,RecyclerView是ListView的一个强大替代品,尤其在遵循Material Design规范时更为适用。RecyclerView因其灵活性和高效性能而被广泛采用。在本文中,我们将探讨RecyclerView的基本使用和与...
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、再...
主要内容是Android动画,Android自定义视图相关的知识,包含一些常见应用中动画效果的模仿实例。随着时间的推移,里面积累的很多代码,大致用5个片段进行分类:扫一扫体验: ImitateFragment(模仿三方应用特效)仿...
总结,"Flappy_Bird"项目作为一个Android游戏开发的实例,涵盖了Java编程、Android SDK、游戏设计原理等多个知识点。对初学者而言,通过研究这个项目,可以深入了解Android游戏开发的基本流程和技术要点,为进一步的...
QML与C++混合编程、Canvas、定制及自定义控件等高级主题,《Qt Quick核心编程》也做了详细讲解,同时提供了多个精彩的实作实例,力求概念清晰,用途明确。《Qt Quick核心编程》的内容适用于桌面与Android平台。值得...
通过以上分析,我们可以看出,Spot项目不仅是Android开发的一个实例,也是Java在移动应用中的实际运用。它涵盖了Android开发的多个重要方面,包括UI设计、数据处理、网络通信和组件交互等,对于学习和理解Android...
本文将基于“Project Joli”这一实例,深入浅出地探讨使用Unity进行游戏开发的基本流程和技术要点。 一、Unity入门 Unity使用C#作为主要编程语言,这使得它对有.NET背景的开发者非常友好。C#语言简洁且功能强大,...