Android自定义View实现

Android自定义View实现很简单

继承View或者其子类,重写构造函数、onDraw,(onMeasure)等函数,根据继承的类的不同可能有所不同。

 

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

 

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

在使用自定义属性的时候,使用前缀:属性名,如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>
转自http://blog.csdn.net/chenjie19891104/article/details/6315668

阅读更多
上一篇andriod Canvas 和 Paint方法的解释
下一篇Android画图之Matrix
想对作者说点什么? 我来说一句

android自定义View-手绘地图

2018年05月15日 18.2MB 下载

android循环view实现

2015年03月13日 3.25MB 下载

Android自定义view,动画

2016年10月15日 24.13MB 下载

android自定义View实现SwitchView

2016年04月05日 6.35MB 下载

HourseProject

2017年07月18日 25.57MB 下载

Android 图片验证码

2016年05月11日 2.57MB 下载

Android 瀑布流

2013年11月05日 494KB 下载

android 自定义View

2009年12月13日 3KB 下载

没有更多推荐了,返回首页

关闭
关闭